我简单的写了个ListView,但是打开就崩溃
已经在AndroidManifest.java中声明了权限,activity_main.xml也是简单一个ListView,打开就崩
////////////////////////////////////////////
这是MainActivity.java
package com.f1993yan.musictest;
import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.MediaStore;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.Window;
import android.widget.ListView;
import java.util.ArrayList;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
ListView listView=(ListView)findViewById(R.id.music_list);
MusicAdapter adapter = new MusicAdapter(this,initList());
Log.d("Main",initList().size()+"");
listView.setAdapter(adapter);
}
private ArrayList<MusicInfo> initList(){
Cursor c = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
new String[]{MediaStore.Audio.Media._ID,MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media.DURATION},null,null,null);
c.moveToFirst();
ArrayList<MusicInfo> music_list = new ArrayList<>();
do {
MusicInfo musicInfo = new MusicInfo();
long id = c.getLong(0);
musicInfo.setId(id);
String title = c.getString(1);
musicInfo.setTitle(title);
String artist = c.getString(2);
musicInfo.setArtist(artist);
int duration = c.getInt(3);
musicInfo.setDuration(duration);
music_list.add(musicInfo);
Log.d("Main",musicInfo.getArtist());
}while (c.moveToNext());
return music_list;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
/////////////////////////////////////////////
这是MusicAdapter.java
package com.f1993yan.musictest;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import java.util.List;
public class MusicAdapter extends BaseAdapter {
private Context context;
private List<MusicInfo> musicInfoList;
public MusicAdapter(Context mcontext,List<MusicInfo> mInfoList){
this.context = mcontext;
this.musicInfoList = mInfoList;
}
@Override
public int getCount() {
return musicInfoList.size();
}
@Override
public Object getItem(int position) {
return musicInfoList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
class ViewHolder{
TextView music_title;
TextView music_artist;
TextView music_duration;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
MusicInfo musicInfo = musicInfoList.get(position);
ViewHolder viewHolder = new ViewHolder();
if (convertView == null){
convertView = LayoutInflater.from(context).inflate(R.layout.music_list_item, null);
viewHolder.music_title = (TextView)convertView.findViewById(R.id.music_item_title);
viewHolder.music_artist = (TextView)convertView.findViewById(R.id.music_item_artist);
viewHolder.music_duration = (TextView)convertView.findViewById(R.id.music_item_duration);
convertView.setTag(viewHolder);
}else {
viewHolder = (ViewHolder)convertView.getTag();
}
viewHolder.music_title.setText(musicInfo.getTitle());
viewHolder.music_artist.setText(musicInfo.getArtist());
viewHolder.music_duration.setText(musicInfo.getDuration());
return convertView;
}
}
/////////////////////////////////////////////
这是MusicInfo.java
package com.f1993yan.musictest;
public class MusicInfo {
private long id;
private String title;
private String artist;
private int duration;
public MusicInfo(){}
public void setId(long mid){
this.id = mid;
}
public long getId(){
return id;
}
public void setTitle(String mtitle){
this.title = mtitle;
}
public String getTitle(){
return title;
}
public void setArtist(String martist){
this.artist = martist;
}
public String getArtist(){
return artist;
}
public void setDuration(int mduration){
this.duration = mduration;
}
public int getDuration(){
return duration;
}
}