【发布时间】:2015-03-07 21:06:53
【问题描述】:
当倒数计时器结束时,我会弹出一个警报对话框。它工作正常,但是当我尝试在对话框中实现声音时,它不起作用。当我从铃声列表中加载用户在应用程序中的其他位置选择的警报(使用共享首选项编号)时,我收到了 NullPointerException。如果我只是输入一个数字而不使用 SharedPreferences,那么当我将数据源设置为 MediaPlayer 时,我会收到 NullPointerException。这是我的代码:
public class AlarmDialog extends DialogFragment {
MediaPlayer mp;
Context context;
Uri alarmSound;
int alarmChosen;
SharedPreferences sharedPrefs;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
LINE 31 sharedPrefs = context.getSharedPreferences("AlarmChosen", Context.MODE_PRIVATE);
alarmChosen = sharedPrefs.getInt("AlarmChosen", 1);
RingtoneManager ringtoneMgr = new RingtoneManager(context);
ringtoneMgr.setType(RingtoneManager.TYPE_ALL);
alarmSound = ringtoneMgr.getRingtoneUri(alarmChosen);
mp = new MediaPlayer();
mp.reset();
try {
LINE 41 mp.setDataSource(alarmSound.toString());
} 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();
}
try {
mp.prepare();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mp.start();
getActivity().getWindow().addFlags(
LayoutParams.FLAG_TURN_SCREEN_ON
| LayoutParams.FLAG_DISMISS_KEYGUARD);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Alarm");
builder.setMessage("An Alarm by AlarmManager");
builder.setPositiveButton("OK", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mp.stop();
mp.release();
getActivity().finish();
}
});
return builder.create();
}
}
我该如何解决这个问题?
编辑: 来自 sharedPrefs 的 LogCat 错误:
03-07 22:22:46.589: E/AndroidRuntime(28062): FATAL EXCEPTION: main
03-07 22:22:46.589: E/AndroidRuntime(28062): Process: com.adrissa.kitchentimer, PID: 28062
03-07 22:22:46.589: E/AndroidRuntime(28062): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.adrissa.kitchentimer/com.adrissa.kitchentimer.DemoActivity}: java.lang.NullPointerException
03-07 22:22:46.589: E/AndroidRuntime(28062): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2394)
03-07 22:22:46.589: E/AndroidRuntime(28062): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2452)
03-07 22:22:46.589: E/AndroidRuntime(28062): at android.app.ActivityThread.access$900(ActivityThread.java:172)
03-07 22:22:46.589: E/AndroidRuntime(28062): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1302)
03-07 22:22:46.589: E/AndroidRuntime(28062): at android.os.Handler.dispatchMessage(Handler.java:102)
03-07 22:22:46.589: E/AndroidRuntime(28062): at android.os.Looper.loop(Looper.java:136)
03-07 22:22:46.589: E/AndroidRuntime(28062): at android.app.ActivityThread.main(ActivityThread.java:5586)
03-07 22:22:46.589: E/AndroidRuntime(28062): at java.lang.reflect.Method.invokeNative(Native Method)
03-07 22:22:46.589: E/AndroidRuntime(28062): at java.lang.reflect.Method.invoke(Method.java:515)
03-07 22:22:46.589: E/AndroidRuntime(28062): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
03-07 22:22:46.589: E/AndroidRuntime(28062): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
03-07 22:22:46.589: E/AndroidRuntime(28062): at dalvik.system.NativeStart.main(Native Method)
03-07 22:22:46.589: E/AndroidRuntime(28062): Caused by: java.lang.NullPointerException
03-07 22:22:46.589: E/AndroidRuntime(28062): at com.adrissa.kitchentimer.AlarmDialog.onCreateDialog(AlarmDialog.java:31)
03-07 22:22:46.589: E/AndroidRuntime(28062): at android.support.v4.app.DialogFragment.getLayoutInflater(DialogFragment.java:295)
03-07 22:22:46.589: E/AndroidRuntime(28062): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:938)
03-07 22:22:46.589: E/AndroidRuntime(28062): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1115)
03-07 22:22:46.589: E/AndroidRuntime(28062): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
03-07 22:22:46.589: E/AndroidRuntime(28062): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1478)
03-07 22:22:46.589: E/AndroidRuntime(28062): at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:570)
03-07 22:22:46.589: E/AndroidRuntime(28062): at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1177)
03-07 22:22:46.589: E/AndroidRuntime(28062): at android.app.Activity.performStart(Activity.java:5461)
03-07 22:22:46.589: E/AndroidRuntime(28062): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2367)
03-07 22:22:46.589: E/AndroidRuntime(28062): ... 11 more
LogCat from error,当我只插入 0 而不是在 sharedPrefs 中选择的数字时。
03-07 22:31:30.979: E/AndroidRuntime(30527): FATAL EXCEPTION: main
03-07 22:31:30.979: E/AndroidRuntime(30527): Process: com.adrissa.kitchentimer, PID: 30527
03-07 22:31:30.979: E/AndroidRuntime(30527): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.adrissa.kitchentimer/com.adrissa.kitchentimer.DemoActivity}: java.lang.NullPointerException
03-07 22:31:30.979: E/AndroidRuntime(30527): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2394)
03-07 22:31:30.979: E/AndroidRuntime(30527): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2452)
03-07 22:31:30.979: E/AndroidRuntime(30527): at android.app.ActivityThread.access$900(ActivityThread.java:172)
03-07 22:31:30.979: E/AndroidRuntime(30527): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1302)
03-07 22:31:30.979: E/AndroidRuntime(30527): at android.os.Handler.dispatchMessage(Handler.java:102)
03-07 22:31:30.979: E/AndroidRuntime(30527): at android.os.Looper.loop(Looper.java:136)
03-07 22:31:30.979: E/AndroidRuntime(30527): at android.app.ActivityThread.main(ActivityThread.java:5586)
03-07 22:31:30.979: E/AndroidRuntime(30527): at java.lang.reflect.Method.invokeNative(Native Method)
03-07 22:31:30.979: E/AndroidRuntime(30527): at java.lang.reflect.Method.invoke(Method.java:515)
03-07 22:31:30.979: E/AndroidRuntime(30527): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
03-07 22:31:30.979: E/AndroidRuntime(30527): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
03-07 22:31:30.979: E/AndroidRuntime(30527): at dalvik.system.NativeStart.main(Native Method)
03-07 22:31:30.979: E/AndroidRuntime(30527): Caused by: java.lang.NullPointerException
03-07 22:31:30.979: E/AndroidRuntime(30527): at com.adrissa.kitchentimer.AlarmDialog.onCreateDialog(AlarmDialog.java:41)
03-07 22:31:30.979: E/AndroidRuntime(30527): at android.support.v4.app.DialogFragment.getLayoutInflater(DialogFragment.java:295)
03-07 22:31:30.979: E/AndroidRuntime(30527): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:938)
03-07 22:31:30.979: E/AndroidRuntime(30527): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1115)
03-07 22:31:30.979: E/AndroidRuntime(30527): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
03-07 22:31:30.979: E/AndroidRuntime(30527): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1478)
03-07 22:31:30.979: E/AndroidRuntime(30527): at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:570)
03-07 22:31:30.979: E/AndroidRuntime(30527): at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1177)
03-07 22:31:30.979: E/AndroidRuntime(30527): at android.app.Activity.performStart(Activity.java:5461)
03-07 22:31:30.979: E/AndroidRuntime(30527): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2367)
03-07 22:31:30.979: E/AndroidRuntime(30527): ... 11 more
【问题讨论】:
-
你的 logcat 说你在哪里得到 NullPointerException?也许你可以发布 logcat?
-
你去@ethan123
-
很酷,所以你的 logcat 说它在第一种情况下发生在第 31 行,在第二种情况下发生在第 41 行。这对应于您上面的代码中的哪一行?
-
我认为我在文本中解释得很好,但现在添加了。