2016-08-02 99 views
2

Ich versuche, die Musikdaten abzurufen, die Daten in eine Reihe Liste speichernd und die Datenschnur in uri umwandelt und es benutze, um die Musik aber die App zu spielen, die abstürzt, wenn ich klicke. Listenansicht Artikel wird die Musik durch ihre uri spielen hier ist mein Code `Wie man Musik durch sein uri

public class Mediafileinfo { 
private String title; 
private String artist; 
private String data; 
public String getData() { 
    return data; 
} 

public void setData(String data) { 
    this.data = data; 
} 
} 

` Dies ist die Klasse, wo ich meine Mediendaten speichere und ich versuche, wie diese zu spielen, wo ich bin falsch machen

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
      Mediafileinfo item = new Mediafileinfo(); 
      Uri myUri = Uri.parse(item.getData()); 
      mediaPlayer = new MediaPlayer(); 
      try { 
       mediaPlayer.setDataSource(String.valueOf(myUri)); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      try { 
       mediaPlayer.prepare(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      mediaPlayer.start(); 
     } 
    }); 

meine Haupttätigkeit Klasse wurden ich erhalte die Daten

protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    External(); 
    ListView listView = (ListView) findViewById(R.id.listView); 
    ArrayAdapter arrayAdapter = new CustomeAdapter(this, audioList); 
    listView.setAdapter(arrayAdapter); 
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
      Mediafileinfo item = new Mediafileinfo(); 
      Uri myUri = Uri.parse(item.getData()); 

      mediaPlayer = new MediaPlayer(); 

      mediaPlayer.reset(); 
      try { 
       mediaPlayer.setDataSource(MainActivity.this,myUri); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      try { 
       mediaPlayer.prepare(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      mediaPlayer.start(); 

     } 
    }); 
} 

private void External() { 
    try { 
     String[] proj = {MediaStore.Audio.Media._ID, 
       MediaStore.Audio.Media.TITLE, 
       MediaStore.Audio.Media.ARTIST, 
       MediaStore.Audio.Media.DURATION, 
     MediaStore.Audio.Media.DATA};// Can include more data for more details and check it. 

     String selection = MediaStore.Audio.Media.DURATION + ">=90000"; 

     String[] selectionArgs = null; 

     String sortOrder = MediaStore.Audio.Media.TITLE + " ASC"; 

     Cursor audioCursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, proj, selection, selectionArgs, sortOrder); 

     if (audioCursor != null) { 
      if (audioCursor.moveToFirst()) { 
       do { 
        int audioTitle = audioCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE); 
        int audioartist = audioCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST); 
        int audioalbum = audioCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION); 
        int audiodata= audioCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA); 
        Mediafileinfo info = new Mediafileinfo(); 
        info.setData(audioCursor.getString(audiodata)); 
        info.setTitle(audioCursor.getString(audioTitle)); 
        info.setAlbum(audioCursor.getLong(audioalbum)); 
        info.setArtist(audioCursor.getString(audioartist)); 
        audioList.add(info); 
       } while (audioCursor.moveToNext()); 
      } 
     } 
     audioCursor.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
} 

mein custome Adapter

public class CustomeAdapter extends ArrayAdapter { 
public CustomeAdapter(Context context, ArrayList<Mediafileinfo> audioList) { 
    super(context,R.layout.custome,audioList); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    LayoutInflater inflate=LayoutInflater.from(getContext()); 
    View v=inflate.inflate(R.layout.custome,parent,false); 
    Mediafileinfo item = (Mediafileinfo) getItem(position); 
    TextView text1 = (TextView) v.findViewById(R.id.textView); 
    text1.setText(item.getData()); 
    TextView text2 = (TextView) v.findViewById(R.id.textView2); 
    text2.setText(item.getArtist()); 
    TextView text3=(TextView)v.findViewById(R.id.textView3); 
    text3.setText(String.format("%02d:%02d", 
      TimeUnit.MILLISECONDS.toMinutes(item.getAlbum()), 
      TimeUnit.MILLISECONDS.toSeconds(item.getAlbum()) - 
        TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(item.getAlbum())))); 

    return v; 
} 
} 

Auf diese Weise ich die Daten immer bin und wie ich es spielen kann, wenn Einzelteil geklickt

+0

Was ist das Fehlerprotokoll beheben? – Shaishav

+0

Java null Punkt Ausnahme uri Zeichenfolge – SAVVY

+0

überprüfen [http://stackoverflow.com/questions/16715003/simple-mediaplayer-play-mp3-from-file-path] – ashutiwari4

Antwort

2

verwenden mediaPlayer.setDataSource(MainActivity.this,myUri); statt mediaPlayer.setDataSource(String.valueOf(myUri));

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
      //Mediafileinfo item = new Mediafileinfo(); 
      Mediafileinfo item = audioList.get(i); 
      Uri myUri = Uri.parse(item.getData()); 
      mediaPlayer = new MediaPlayer(); 
      try { 
       // mediaPlayer.setDataSource(String.valueOf(myUri)); 
       mediaPlayer.setDataSource(MainActivity.this,myUri); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      try { 
       mediaPlayer.prepare(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      mediaPlayer.start(); 
     } 
    }); 
+0

immer noch Fehler wie java.lang.NullPointerException: uriString und seine Anzeige gibt es einen Fehler in der On-Element klicken – SAVVY

+0

kann logcat hier buchen? und was ist Mediafileinfo? –

+0

Sie erstellen 'Mediafileinfo'-Objekt und erhalten dann' getData() 'daraus. Ich denke, Ihr Artikel ist null, weil Sie es jetzt erstellen? –

0

Versuchen Sie, diese

try { 
    Uri myUri = Uri.parse(item.getData()); 
    Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), myUri); 
    r.play(); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
-1

Sie sollten ein Mediaplayer Zeit

init und add mediaPlayer.reset vor mediaPlayer.setDataSource (String.valueOf (myUri))

versuchen, dies kann Ihr Problem

+0

funktioniert nicht – SAVVY

+1

Bitte vermeiden Sie das Hinzufügen von Antworten, die Sie nicht getestet haben. Dies ist offensichtlich, da das OP sagt, dass es nicht funktioniert. – techydesigner