2016-08-02 109 views
2

我试图检索音乐数据,将数据保存到数组列表中,并将数据字符串转换为uri并使用它播放音乐,但是当我点击时应用程序崩溃。列表视图项,将其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; 
} 
} 

` 这是我在哪里保存我的媒体数据 类,我试图像这样 我在哪里玩做错了

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

我的主要活动课是我得到的数据

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

我custome适配器

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

这样我得到的数据,以及如何我可以玩时,项目点击

+0

请告诉我错误日志? – Shaishav

+0

java null点异常uri字符串 – SAVVY

+0

检查[this](http://stackoverflow.com/questions/16715003/simple-mediaplayer-play-mp3-from-file-path) – ashutiwari4

回答

2

。使用本mediaPlayer.setDataSource(MainActivity.this,myUri);代替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

仍然收到类似java.lang.NullPointerException的异常:uriString并显示其中存在一些错误,请点击 – SAVVY

+0

可以在这里发布logcat吗?什么是Mediafileinfo? –

+0

您正在创建'Mediafileinfo'对象,然后从中获取'getData()'。我认为你的物品是空的,因为你现在正在创建它? –

0

试试这个

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

你应该初始化MediaPlayer的一次

和add mediaPlayer.reset befor mediaPlayer.setDataSource(String.valueOf(myUri))

试试这个可以解决您的问题

+0

其不工作 – SAVVY

+1

请避免添加您未测试的答案。这显然是因为OP说它不起作用。 – techydesigner