2016-11-12 6 views
0

Ich bin Anfänger in android Entwicklung zu spielen und ich entwickle ein Musik-App und ich habe die ganze SD-Karte Musik in der Liste abgefragt, aber ich bin nicht in der Lage den Song zu spielen durch seine Name oder ID. Ich habe es in listView aufgelistet und durch Klicken auf das ausgewählte Element wird seinen Namen angezeigt, welches Lied ich ausgewählt, aber nicht spielen mit Mediaplayer-Klasse. Bitte hilf mir, es zu lösen.kann nicht Musik in android

1. Dies ist Erste Java Datei für Liste der Songs von SD-Karte bekommen:

public class MusicAppList erstreckt Aktivität {

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. Unten ist die Zweite Java Datei wo ich versuche, den Song zu spielen.

public class MusicPlaying Aktivität erstreckt {

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"); 
    } 
}} 

3. Logcat Fehler ist als: -

11-15 15: 57: 13,503: E/Android Runtime (996): FATAL AUSNAHME: Haupt 11-15 15: 57: 13,503: E/Android Runtime (996): Prozess: com.example.musicapp, PID: 996

11-15 15: 57: 13,503: E/Android Runtime (996): java .lang.RuntimeException: Die Aktivität ComponentInfo konnte nicht gestartet werden {com.example.musicapp/com.example.musicapp.MusicPlaying}: java.lang.NullPointerException: Versuch, die virtuelle Methode 'void android.media.MediaPlayer.prepareAsync()' für eine Nullobjekt-Referenz aufzurufen 11-15 15: 57: 13.503: E/AndroidRuntime (996): bei android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2455) 11-15 15: 57: 13.503: E/AndroidRuntime (996): at android.app.ActivityThread. handleLaunchActivity (ActivityThread.java:2517) 11-15 15: 57: 13.503: E/AndroidRuntime (996): um android.app.ActivityThread.access $ 800 (ActivityThread.java:162) 11-15 15: 57: 13.503 : E/AndroidRuntime (996): bei android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1412) 11-15 15: 57: 13.503: E/AndroidRuntime (996): bei android.os.Handler.dispatchMessage (Handler.java:106) 11-15 15: 57: 13.503: E/AndroidRuntime (996): um android.os.Looper.loop (Looper.java:189) 11-15 15: 57: 13.503: E/AndroidRuntime (996): bei android.app.ActivityThread.main (ActivityThread.java:5529) 11-15 15: 57: 13.503: E/AndroidRuntime (996): at java.lang.reflect.Method.invoke (systemeigene Methode) 11-15 15: 57: 13.503: E/AndroidRuntime (996): at java.lang.reflect .Method.invoke (Methode.java:372) 11-15 15: 57: 13.503: E/AndroidRuntime (996): um com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java: 950) 11-15 15: 57: 13.503: E/AndroidRuntime (996): unter com.android.internal.os.ZygoteInit.main (ZygoteInit.java:745) 11-15 15: 57: 13.503: E/AndroidRuntime (996): Verursacht von: java.lang.NullPointerException: Versuch, die virtuelle Methode 'void android.media.MediaPlayer.prepareAsync()' für eine Nullobjekt-Referenz aufzurufen 11-15 15: 57: 13.50 3: E/AndroidRuntime (996): bei com.example.musicapp.MusicPlaying.onCreate (MusicPlaying.java:60) 11-15 15: 57: 13.503: E/AndroidRuntime (996): bei android.app.Activity. performCreate (Activity.java:5966) 11-15 15: 57: 13.503: E/AndroidRuntime (996): bei android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1106) 11-15 15: 57: 13,503: E/Android Runtime (996): bei android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2408)

+1

Geben Sie einen Code ein, den Sie haben. Teid –

+1

Sie können den Code in der Frage als Text formatieren, damit die Leute sie kopieren und einfügen können, um sie zu testen und Ihnen zu helfen. Bitte bedenken Sie, Ihre Frage zu bearbeiten und den Code als Text (und formatiert) einzufügen. – Tom

+0

Es wird sehr schwierig sein, Ihnen zu helfen, es sei denn: 1) Sie werden etwas Code von MusicPlaying onCreate veröffentlichen: Sind Sie sicher, dass die Intent-Daten korrekt abgerufen werden? 2) Sie sollten auch einige Logcat veröffentlichen: Welche Ausnahmen fangen Sie? 3) besser zu kopieren und fügen Sie Ihren Code statt Screenshots, wie Tom bereits hingewiesen – c0rtexx

Antwort

0


Mein Vorschlag Sehen Sie sich Ihre ApplicationManifest.xml an und überprüfen Sie, ob Sie die erforderliche Berechtigung zum Schreiben/Lesen von der externen SD-Karte haben.

Typische externe SD-Karte Erlaubnis

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


Und natürlich, wenn läuft Marshallow oder mehr werden Sie für die Erlaubnis von dem Benutzer fragen, was ein Schmerz sein kann.

+0

Vielen Dank für Ihre Zeit. Ich habe diesen Code bereits darin aufgenommen. Ich habe meine Frage einschließlich Java-Dateien aktualisiert, bitte helfen Sie mir im Code. –

Verwandte Themen