Android - 在状态 1 中开始调用

标签 android expandablelistview

我的应用程序遇到问题,我想做的是当我单击 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/

相关文章:

android - 在扩展 Activity 而不是 Activity 时向可扩展 ListView 子项添加点击事件

android - ExpandableListView 中的 EditTexts

android - 从android中的 fragment 管理工具栏的导航和后退按钮

android - 为什么启动 Activity - 焦点在我的 EditText 上,我无法删除它?

android - 在android中单击按钮时在可扩展 ListView 中获取edittext的值

java - 如何在android中的特定 View 下方显示下拉 ListView ?

android - ExpandableListView - 父项及其子项周围的边界

android - 如何获取 ExpandableListView 子文本

android - Android native 服务器列表

android - 如何从 Qt 获取 android <shared-storage> 路径?