【问题标题】:Playing music from List View从列表视图播放音乐
【发布时间】:2014-01-11 18:31:02
【问题描述】:

嗨,我有列表,我有本地音乐文件。当我单击我的列表项时,我想播放我的音乐文件。 这是我的 onclick 列表项的外观:

lv.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            switch( position )
            {
               case 0:  
                   v.contentEquals("file:///android_asset/disco.mp3");
                   playSound(v);
               case 1:
                  v.contentEquals("file:///android_asset/disco.mp3");
                   playSound(v); 
                       break;
            };

        }

这是我的媒体播放器的样子:

private void playSound(String v) {
            // TODO Auto-generated method stub
            try {
                mp.setDataSource(v);
            } catch (IllegalArgumentException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (SecurityException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IllegalStateException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            mp.start();
        }

当我单击列表项时,程序冻结并强制关闭。 我该怎么办?

logcat 输出

01-11 23:19:19.191:E/AndroidRuntime(4811):致命异常:主要 01-11 23:19:19.191: E/AndroidRuntime(4811): java.lang.NullPointerException 01-11 23:19:19.191: E/AndroidRuntime(4811): 在 com.hmomeni.customlistview.MainActivity$11.onItemClick(MainActivity.java:113) 01-11 23:19:19.191: E/AndroidRuntime(4811): 在 android.widget.AdapterView.performItemClick(AdapterView.java:301) 01-11 23:19:19.191: E/AndroidRuntime(4811): 在 android.widget.AbsListView.performItemClick(AbsListView.java:1519) 01-11 23:19:19.191: E/AndroidRuntime(4811): 在 android.widget.AbsListView$PerformClick.run(AbsListView.java:3291) 01-11 23:19:19.191: E/AndroidRuntime(4811): 在 android.widget.AbsListView$1.run(AbsListView.java:4340) 01-11 23:19:19.191: E/AndroidRuntime(4811): 在 android.os.Handler.handleCallback(Handler.java:725) 01-11 23:19:19.191: E/AndroidRuntime(4811): 在 android.os.Handler.dispatchMessage(Handler.java:92) 01-11 23:19:19.191: E/AndroidRuntime(4811): 在 android.os.Looper.loop(Looper.java:137) 01-11 23:19:19.191: E/AndroidRuntime(4811): 在 android.app.ActivityThread.main(ActivityThread.java:5328) 01-11 23:19:19.191: E/AndroidRuntime(4811): 在 java.lang.reflect.Method.invokeNative(Native Method) 01-11 23:19:19.191: E/AndroidRuntime(4811): 在 java.lang.reflect.Method.invoke(Method.java:511) 01-11 23:19:19.191: E/AndroidRuntime(4811): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102) 01-11 23:19:19.191: E/AndroidRuntime(4811): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869) 01-11 23:19:19.191: E/AndroidRuntime(4811): at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

  • 您应该做的是粘贴您的堆栈跟踪并向我们展示您的错误。谢谢
  • 可能是文件寻址引起的,能发一下你的Log数据吗?
  • 第 113 行可能包含未初始化的变量

标签: android listview media-player


【解决方案1】:

"v" 是普通字符串吗?如果是这样,因为它是不可变的,所以你不能通过函数来​​改变它:

v.contentEquals("file:///android_asset/disco.mp3");

你应该使用普通的“=”来设置它:

v="file:///android_asset/disco.mp3";

【讨论】:

  • 在调用“playSound”之前是否初始化“mp”?
  • 是的,它的正常字符串。还有其他方法可以播放歌曲数量吗?我的清单有十个项目,然后是不同的歌曲,我应该如何处理它们?
  • 首先你需要处理异常吗?无论如何,您应该将它们放在一个数组中,而不是处理每个项目(想象一下您将如何处理 1000 首歌曲......)。也许使用列表的适配器来获取被选中的项目(使用“getItem()”),并获取它的路径?
  • 播放资产文件夹中的文件,也许你应该看看这个链接:stackoverflow.com/a/8107056/878126
  • 顺便说一句,为了找到bug的原因,你可以双击logcat上的异常,看看它去了哪里。您也可以在函数的开头放置一个断点(双击行首的左侧),调试(单击看起来像错误的按钮),然后在行上逐步执行直到您看看发生了什么(使用 F5、F6、F7 和 F8,每个都执行不同类型的步进)。
猜你喜欢
  • 2014-03-09
  • 1970-01-01
  • 2012-06-19
  • 2021-07-26
  • 1970-01-01
  • 1970-01-01
  • 2014-04-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多