2016-11-12 4 views
0
アンドロイド

で音楽を再生すると、私は音楽アプリを開発していると私は、リスト内のすべてのSDカード音楽を照会しているが、私はを通じて選択した曲を再生することができませんの名前またはIDです。 listViewにリストしました。選択した項目をクリックすると、選択した曲の名前が表示されますが、mediaplayerクラスを使用して再生していません。それを解決するために私を助けてください。できませんが、私は<strong>アンドロイド</strong>開発の初心者です

1.これは、SDカードからの曲のリストを取得するためのまずJavaファイルです:

パブリッククラスMusicAppListは、アクティビティの下{

TextView tv; 
ContentResolver cr; 
Cursor cs; 
Uri uri; 
ListView lv; 
String tname,csong; 

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_music_app_list); 

     lv=(ListView)findViewById(R.id.songslist); 
     Songs(); 

} 
public void Songs(){ 

    cr=getContentResolver(); 
    uri=android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
    cs=cr.query(uri,null,null, null,"title ASC"); 

    final ArrayList<String> list=new ArrayList<String>(); 
    while(cs.moveToNext()){ 
     list.add(cs.getString(cs.getColumnIndex(android.provider.MediaStore.Audio.Media.TITLE))); 
    } 
    ArrayAdapter<String> adapter=new ArrayAdapter<String>(getApplicationContext(),R.layout.mlistinterface,list); 
    lv.setAdapter(adapter); 

    lv.setOnItemClickListener(new OnItemClickListener(){ 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 

     csong=(String)parent.getItemAtPosition(position); 
     Intent i1=new Intent(getApplicationContext(),MusicPlaying.class); 
     Bundle b=new Bundle(); 
     b.putInt("pos", position); 
     b.putString("song", csong); 
     b.putStringArrayList("songlist", list); 
     i1.putExtras(b); 
     startActivity(i1); 
     } 
    }); }} 

2.セカンドJavaのですが拡張ファイルここで私は曲を演奏しようとしています。

パブリッククラスMusicPlayingアクティビティを拡張{

TextView tv; 
ImageView pre,nxt,play; 
ArrayList<String>songList; 
String name; 
private MediaPlayer mp; 
String song; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_music_playing); 

    tv=(TextView)findViewById(R.id.songname); 
    pre=(ImageView)findViewById(R.id.previous); 
    nxt=(ImageView)findViewById(R.id.next); 
    play=(ImageView)findViewById(R.id.play); 

    tv.setSelected(true); 

    Bundle bb=getIntent().getExtras(); 
    name=bb.getString("song"); 
    tv.setText(String.valueOf(name)); 
    songList=(ArrayList)bb.getStringArrayList("songlist") ; 
    int pos=bb.getInt("pos"); 
    mp=new MediaPlayer(); 
    Uri u=Uri.parse(songList.get(pos)); 

    try{ 
     mp.setDataSource(getApplicationContext(), u); 
     mp.prepareAsync(); 
     mp.start(); 

    } 
    catch(Exception e){ 
     Log.e("ErrorPlaying", "Unable to get Reference of the song"); 
    } 
}} 

Logcatエラー通りである: -

11-15 15:57:13.503:E/AndroidRuntime(996):致命的な例外:メイン 11-15 15:57:13.503:E/AndroidRuntime(996):プロセス:com.example.musicapp、PID:996

11-15 15:57:13.503:E/AndroidRuntime(996):java .lang.RuntimeException:アクティビティを開始できませんComponentInfo {com.example.musicapp/com.example.musicapp.MusicPlaying}:java.lang.NullPointerException:NULLオブジェクト参照で仮想メソッド 'void android.media.MediaPlayer.prepareAsync()'を呼び出そうとしました 11-15 15: 57:13.503:E/AndroidRuntime(996):android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2455) 11-15 15:57:13.503:E/AndroidRuntime(996):android.app.ActivityThread。 handleLaunchActivity(ActivityThread.java:2517) 11-15 15:57:13.503:E/AndroidRuntime(996):android.app.ActivityThread.access $ 800(ActivityThread.java:162) 11-15 15:57:13.503 :E/AndroidRuntime(996):android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1412) 11-15 15:57:13.503:E/AndroidRuntime(996):android.os.Handler.dispatchMessage (Handler.java:106) 11-15 15:57:13.503:E/AndroidRuntime(996):at android.os.Looper.loop(Looper.java:189) 11-15 15:57:13.503:E/AndroidRuntime(996):android.app.ActivityThread.main(ActivityThread.java:5529) 11-15 15:57:13.503:E/AndroidRuntime(996):java.lang.reflect.Method.invoke(ネイティブメソッド) 11-15 15:57:13.503:E/AndroidRuntime(996):java.lang.reflect .Method.invoke(Method.java:372) 11-15 15:57:13.503:E/AndroidRuntime(996):com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:950) 11-15 15:57:13.503:E/AndroidRuntime(996):com.android.internal.os.ZygoteInit.main(ZygoteInit.java:745) 11-15 15:57:13.503:E/AndroidRuntime(996) ):原因:java.lang.NullPointerException:NULLオブジェクト参照で仮想メソッド 'void android.media.MediaPlayer.prepareAsync()'を呼び出そうとしました 11-15 15:57:13.50 3:E/AndroidRuntime(996):com.example.musicapp.MusicPlaying.onCreate(MusicPlaying.java:60) 11-15 15:57:13.503:E/AndroidRuntime(996):android.app.Activity。 performCreate(Activity.java:5966) 11-15 15:57:13.503:E/AndroidRuntime(996):android.app。Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 11-15 15:57:13.503:E/AndroidRuntime(996):android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2408)

+1

あなたが持っているコードを入れよう –

+1

質問のコードをテキストとして書式設定することができます。そのため、人々はコピー&ペーストしてテストして手助けをすることができます。あなたの質問を編集し、コードをテキストとして挿入してフォーマットしてください。 – Tom

+0

1)MusicPlayingからいくつかのコードを投稿しますonCreate:意図データが正しく検索されているかどうかを確認してください。 2)logcatを投稿する必要があります:あなたはどのような例外を捕まえていますか? 3)スクリーンショットを撮るのではなく、コードをコピーして貼り付けるほうが良いとTomがすでに指摘しているように – c0rtexx

答えて

0


私の提案で ApplicationManifest.xmlを見て、外部のSDカードからの書き込み/読み取りに必要な権限があることを確認してください。

典型的な外部SDカードの許可

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 


そして、明らかに、Marshallow以上を実行している場合は、痛みをすることができ、ユーザからの許可を求める必要があります。

+0

私にあなたの時間を与えてくれてありがとう。私はすでにそのコードをそれに含めています。私はJavaファイルを含む私の質問を更新しました、コードで私を助けてください。 –

関連する問題