【问题标题】:Handling Exception in a MediaFile app处理 MediaFile 应用程序中的异常
【发布时间】:2009-12-20 07:25:46
【问题描述】:

我正在开发一个媒体文件应用程序,旨在播放存储在 我的原始文件夹。总共有大约 32 种声音。这就是我 点击每个按钮:

Button btnGrowUp = (Button) this.findViewById(R.id.GrowUp);
btnGrowUp.setOnClickListener(btnGrowUpListener);

private OnClickListener btnGrowUpListener = new OnClickListener()
{
    public void onClick(View v)
    {
        //Toast.makeText(getBaseContext(), "Grow Up audio file is being played", Toast.LENGTH_SHORT).show();

        MediaPlayer mp = MediaPlayer.create(MainScreen.this, R.raw.growup);
        mp.start();
    }
};

我收到一个运行时异常,提示“应用程序意外停止” 在我的 logcat 窗口中关注消息:

12-19 12:33:05.420: WARN/dalvikvm(699): threadid=3: 线程退出
有未捕获的异常(组=0x4000fe70)
12-19 12:33:05.441:错误/AndroidRuntime(699):未捕获的处理程序:
由于未捕获的异常,线程主退出
12-19 12:33:05.460: 错误/AndroidRuntime(699):
java.lang.NullPointerException
12-19 12:33:05.460: 错误/AndroidRuntime(699): 在
com.myapps.media.MainScreen$8.onClick(MainScreen.java:244)
12-19 12:33:05.460: 错误/AndroidRuntime(699): 在
android.view.View.performClick(View.java:2179)
12-19 12:33:05.460: 错误/AndroidRuntime(699): 在
android.view.View.onTouchEvent(View.java:3828)
12-19 12:33:05.460: 错误/AndroidRuntime(699): 在
android.widget.TextView.onTouchEvent(TextView.java:6291)
12-19 12:33:05.460: 错误/AndroidRuntime(699): 在
android.view.View.dispatchTouchEvent(View.java:3368)
12-19 12:33:05.460: 错误/AndroidRuntime(699): 在
android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863)
12-19 12:33:05.460: 错误/AndroidRuntime(699): 在
android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863)
12-19 12:33:05.460: 错误/AndroidRuntime(699): 在
android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863)
12-19 12:33:05.460: 错误/AndroidRuntime(699): 在
android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863)
12-19 12:33:05.460: 错误/AndroidRuntime(699): 在
android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863)
12-19 12:33:05.460: 错误/AndroidRuntime(699): 在
com.android.internal.policy.impl.PhoneWindow
$DecorView.superDispatchTouchEvent(PhoneWindow.java:1707)
12-19 12:33:05.460: 错误/AndroidRuntime(699): 在
com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent
(PhoneWindow.java:1197)
12-19 12:33:05.460: 错误/AndroidRuntime(699): 在
android.app.Activity.dispatchTouchEvent(Activity.java:1993)
12-19 12:33:05.460: 错误/AndroidRuntime(699): 在
com.android.internal.policy.impl.PhoneWindow
$DecorView.dispatchTouchEvent(PhoneWindow.java:1691)
12-19 12:33:05.460: 错误/AndroidRuntime(699): 在
android.view.ViewRoot.handleMessage(ViewRoot.java:1525)
12-19 12:33:05.460: 错误/AndroidRuntime(699): 在
android.os.Handler.dispatchMessage(Handler.java:99)
12-19 12:33:05.460: 错误/AndroidRuntime(699): 在
android.os.Looper.loop(Looper.java:123)
12-19 12:33:05.460: 错误/AndroidRuntime(699): 在
android.app.ActivityThread.main(ActivityThread.java:3948)
12-19 12:33:05.460: 错误/AndroidRuntime(699): 在
java.lang.reflect.Method.invokeNative(Native Method)
12-19 12:33:05.460: 错误/AndroidRuntime(699): 在
java.lang.reflect.Method.invoke(Method.java:521)
12-19 12:33:05.460: 错误/AndroidRuntime(699): 在
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run
(ZygoteInit.java:782)
12-19 12:33:05.460: 错误/AndroidRuntime(699): 在
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
12-19 12:33:05.460: 错误/AndroidRuntime(699): 在
dalvik.system.NativeStart.main(本机方法)
12-19 12:33:05.520:INFO/Process(563):发送信号。 PID:699 SIG:3
12-19 12:33:05.520: INFO/dalvikvm(699): threadid=7: 对信号做出反应
3
12-19 12:33:05.601: INFO/dalvikvm(699): 将堆栈跟踪写入'/data/
anr/traces.txt'
12-19 12:33:05.982: 信息/ARMAssembler(563): 生成
扫描线__00000077:03515104_00000000_00000000 [27 ipp](41 英寸)在
[0x27c718:0x27c7bc] 在 982527 ns
12-19 12:33:06.011: 信息/ARMAssembler(563): 生成
扫描线__00000077:03515104_00001001_00000000 [64 ipp](84 英寸)在
[0x27c7c0:0x27c910] 在 1804978 ns

如何解决这个问题?谢谢

马苏德

【问题讨论】:

  • 因为您的代码清单中没有行号,如果您让我们知道哪一行失败,将会非常有帮助! (或使用糊状,我猜上下文很重要)
  • 正在定义的匿名侦听器 (btnGrowUpListener) 被封装在一个名为 MainScreen 的类中,因此为了提供所需的 Android Context,使用了 MainScreen.this 表示法。

标签: android nullpointerexception


【解决方案1】:

您使用的MediaPlayer constructor 的Javadoc 说如果创建播放器失败,它将返回null

您没有在调用 start 方法之前检查创建是否成功,因此根据上面的堆栈跟踪,这是您看到的异常的最可能原因。

【讨论】:

  • 非常感谢!我已经解决了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-01
  • 2014-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-13
相关资源
最近更新 更多