我的应用程序遇到问题,我想做的是当我单击 exp 列表的子项时它会播放歌曲。 很明显什么时候开始播放第一首歌曲但停止后我再次播放它时我的 logcat 中显示错误。 我不知道如何解决这个问题。 请帮助...
这是我的代码:
public class BacktrackActivity extends Activity {
MediaPlayer mp;
ExpandableListAdapter listAdapter;
ExpandableListView expListView;
List<String> listDataHeader;
HashMap<String, List<String>> listDataChild;
Context context;
public ImageButton stop;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.backtrack);
// final int[] blues = {R.raw.satch_boogie, R.raw.satch_boogie};
mp = MediaPlayer.create(this, R.raw.satch_boogie);
// get the listview
expListView = (ExpandableListView) findViewById(R.id.genre_list);
// preparing list data
prepareListData();
listAdapter = new ExpandableListAdapter(this,listDataHeader,listDataChild);
// setting list adapter
expListView.setAdapter(listAdapter);
stop = (ImageButton) findViewById(R.id.imageButton1);
stop.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
mp.stop();
mp.reset();
}
});
expListView.setOnGroupClickListener(new OnGroupClickListener() {
public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition,
long id) {
// TODO Auto-generated method stub
return false;
}
});
expListView.setOnGroupExpandListener(new OnGroupExpandListener() {
@Override
public void onGroupExpand(int groupPosition) {
Toast.makeText(getApplicationContext(), "Choose your " +
listDataHeader.get(groupPosition) + " Backtrack",
Toast.LENGTH_SHORT).show();
}
});
// Listview on child click listener
expListView.setOnChildClickListener(new OnChildClickListener() {
public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id) {
mp.start();
return false;
}
});
}
/*
* Preparing the list data
*/
private void prepareListData() {
listDataHeader = new ArrayList<String>();
listDataChild = new HashMap<String, List<String>>();
// Adding child data
listDataHeader.add("Blues");
listDataHeader.add("Jazz");
listDataHeader.add("Rock");
listDataHeader.add("RnB");
// Adding child data
List<String> Blues = new ArrayList<String>();
Blues.add("The Shawshank Redemption");
Blues.add("The Godfather");
Blues.add("The Godfather: Part II");
Blues.add("Pulp Fiction");
Blues.add("The Good, the Bad and the Ugly");
Blues.add("The Dark Knight");
Blues.add("12 Angry Men");
List<String> Jazz = new ArrayList<String>();
Jazz.add("The Conjuring");
Jazz.add("Despicable Me 2");
Jazz.add("Turbo");
Jazz.add("Grown Ups 2");
Jazz.add("Red 2");
Jazz.add("The Wolverine");
List<String> Rock = new ArrayList<String>();
Rock.add("2 Guns");
Rock.add("The Smurfs 2");
Rock.add("The Spectacular Now");
Rock.add("The Canyons");
Rock.add("Europa Report");
List<String> RnB = new ArrayList<String>();
RnB.add("2 Guns");
RnB.add("The Smurfs 2");
RnB.add("The Spectacular Now");
RnB.add("The Canyons");
RnB.add("Europa Report");
listDataChild.put(listDataHeader.get(0), Blues); // Header, Child data
listDataChild.put(listDataHeader.get(1), Jazz);
listDataChild.put(listDataHeader.get(2), Rock);
listDataChild.put(listDataHeader.get(3), RnB);
}
}
这是我的 logcat 错误
12-04 08:52:54.317:W/Trace(1413):来自 nativeGetEnabledTags 的意外值:0 12-04 08:52:54.336: E/MediaPlayer(1413): 在状态 1 中开始调用 12-04 08:52:54.336: E/MediaPlayer(1413): 错误 (-38, 0) 12-04 08:52:54.356: W/Trace(1413): 来自 nativeGetEnabledTags 的意外值:0 12-04 08:52:54.356: W/Trace(1413): 来自 nativeGetEnabledTags 的意外值:0 12-04 08:52:54.416:W/Trace(1413):来自 nativeGetEnabledTags 的意外值:0 12-04 08:52:54.416:W/Trace(1413):来自 nativeGetEnabledTags 的意外值:0 12-04 08:52:54.466: E/MediaPlayer(1413): 错误 (-38,0)
最佳答案
通常这种错误发生在您尝试在 prepare()
完成之前调用 start()
时。
在调用 mp.start() 之前;你应该确保你已经设置了 setDataSource()
并且 prepare() 已经完成。
在您的代码中,通过单击停止,您已经重置了媒体。因此,在再次调用 mp.start() 之前,您至少应该再次 setDataSource()
。
恕我直言,它第一次起作用是因为您在 onCreate()
方法中设置了数据源( MediaPlayer.create(this, R.raw.satch_boogie);
)并且在您单击 listView 子项时,它有足够的时间准备。
尝试 setDataSource (MediaPlayer.create(this, R.raw.satch_boogie);
) 任何时候重置它。
关于Android - 在状态 1 中开始调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20370562/