Android-闹钟错误

Android-闹钟错误,android,nullpointerexception,alarmmanager,android-alarms,Android,Nullpointerexception,Alarmmanager,Android Alarms,我下载报警应用程序,因为我需要了解它是如何工作的。GNU许可证 但我不能运行它。当我点击(某物?)时,我得到以下错误: 08-03 14:40:26.154: E/AndroidRuntime(255): at com.codeskraps.talarkam.TalarkamActivity.onResume(TalarkamActivity.java:108) 部分代码: protected void onCreate(Bundle savedInstanceState)

我下载报警应用程序,因为我需要了解它是如何工作的。GNU许可证

但我不能运行它。当我点击(某物?)时,我得到以下错误:

        08-03 14:40:26.154: E/AndroidRuntime(255):  at com.codeskraps.talarkam.TalarkamActivity.onResume(TalarkamActivity.java:108)
部分代码:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.d(TAG, "onCreate Started");

    setContentView(R.layout.alarm_controller);

    prefs = PreferenceManager.getDefaultSharedPreferences(this);

    tpAlarm = (TimePicker) findViewById(R.id.tpAlarm);
    chkSnooze = (CheckBox) findViewById(R.id.chkSnooze);
    etxtSnoozeMin = (EditText) findViewById(R.id.etxtSnoozeMin);
    Button button = (Button) findViewById(R.id.btnSetAlarm);
    btnSetTone = (Button) findViewById(R.id.btnSetTone);
    chkVolume = (CheckBox) findViewById(R.id.chkVolume);
    skbVolume = (SeekBar) findViewById(R.id.skbVolume);

    button.setOnClickListener(setAlarmListener);
    btnSetTone.setOnClickListener(this);
}


protected void onResume() {
    Log.d(TAG, "onResume");
    super.onResume();

    tpAlarm.setCurrentHour(prefs.getInt(M_HOUR, 0));
    tpAlarm.setCurrentMinute(prefs.getInt(M_MINT, 0));
    chkSnooze.setChecked(prefs.getBoolean(M_SNOOZE, false));
    etxtSnoozeMin.setText(prefs.getString(SNOOZE_T, "0"));
    chkVolume.setChecked(prefs.getBoolean(CHKVOLUME, false));
    skbVolume.setProgress(prefs.getInt(SKBVOLUME, 0));

    Uri alarmUri = Uri.parse(prefs.getString(TONE, null));
    Ringtone ringtone = RingtoneManager.getRingtone(this, alarmUri);
    if (ringtone != null) {
        String name = ringtone.getTitle(this);
        btnSetTone.setText(name);
    } else
        btnSetTone.setText(getString(R.string.btn_SetAlarmTone));

    if (prefs.getBoolean(FIRST_LAUNCH, true)) {
        Intent checkIntent = new Intent();
        checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
        startActivityForResult(checkIntent, MY_DATA_CHECK_CODE);

        SharedPreferences.Editor editor = prefs.edit();

        editor.putBoolean(FIRST_LAUNCH, false);
        editor.commit();
    }
}


protected void onPause() {
    Log.d(TAG, "onPause");
    super.onPause();

    SharedPreferences.Editor editor = prefs.edit();

    editor.putInt(M_HOUR, tpAlarm.getCurrentHour());
    editor.putInt(M_MINT, tpAlarm.getCurrentMinute());
    editor.putBoolean(M_SNOOZE, chkSnooze.isChecked());
    editor.putString(SNOOZE_T, etxtSnoozeMin.getText().toString());
    editor.putBoolean(CHKVOLUME, chkVolume.isChecked());
    editor.putInt(SKBVOLUME, skbVolume.getProgress());

    editor.commit();
}
日志:

08-03 14:40:25.684: D/TalarkamActivity(255): onCreate Started
08-03 14:40:25.965: D/dalvikvm(255): GC freed 599 objects / 51056 bytes in 86ms
08-03 14:40:26.134: D/TalarkamActivity(255): onResume
08-03 14:40:26.144: D/AndroidRuntime(255): Shutting down VM
08-03 14:40:26.144: W/dalvikvm(255): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
08-03 14:40:26.144: E/AndroidRuntime(255): Uncaught handler: thread main exiting due to uncaught exception
08-03 14:40:26.154: E/AndroidRuntime(255): java.lang.RuntimeException: Unable to resume activity {com.codeskraps.talarkam/com.codeskraps.talarkam.TalarkamActivity}: java.lang.NullPointerException: uriString
08-03 14:40:26.154: E/AndroidRuntime(255):  at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2950)
08-03 14:40:26.154: E/AndroidRuntime(255):  at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2965)
08-03 14:40:26.154: E/AndroidRuntime(255):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2516)
08-03 14:40:26.154: E/AndroidRuntime(255):  at android.app.ActivityThread.access$2200(ActivityThread.java:119)
08-03 14:40:26.154: E/AndroidRuntime(255):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
08-03 14:40:26.154: E/AndroidRuntime(255):  at android.os.Handler.dispatchMessage(Handler.java:99)
08-03 14:40:26.154: E/AndroidRuntime(255):  at android.os.Looper.loop(Looper.java:123)
08-03 14:40:26.154: E/AndroidRuntime(255):  at android.app.ActivityThread.main(ActivityThread.java:4363)
08-03 14:40:26.154: E/AndroidRuntime(255):  at java.lang.reflect.Method.invokeNative(Native Method)
08-03 14:40:26.154: E/AndroidRuntime(255):  at java.lang.reflect.Method.invoke(Method.java:521)
08-03 14:40:26.154: E/AndroidRuntime(255):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
08-03 14:40:26.154: E/AndroidRuntime(255):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
08-03 14:40:26.154: E/AndroidRuntime(255):  at dalvik.system.NativeStart.main(Native Method)
08-03 14:40:26.154: E/AndroidRuntime(255): Caused by: java.lang.NullPointerException: uriString
08-03 14:40:26.154: E/AndroidRuntime(255):  at android.net.Uri$StringUri.<init>(Uri.java:420)
08-03 14:40:26.154: E/AndroidRuntime(255):  at android.net.Uri$StringUri.<init>(Uri.java:410)
08-03 14:40:26.154: E/AndroidRuntime(255):  at android.net.Uri.parse(Uri.java:382)
08-03 14:40:26.154: E/AndroidRuntime(255):  at com.codeskraps.talarkam.TalarkamActivity.onResume(TalarkamActivity.java:108)
08-03 14:40:26.154: E/AndroidRuntime(255):  at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1149)
08-03 14:40:26.154: E/AndroidRuntime(255):  at android.app.Activity.performResume(Activity.java:3763)
08-03 14:40:26.154: E/AndroidRuntime(255):  at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2937)
08-0314:40:25.684:D/talarkamaActivity(255):一旦创建启动
08-03 14:40:25.965:D/dalvikvm(255):GC在86毫秒内释放了599个对象/51056字节
2008-03 14:40:26.134:D/Talarkama活动(255):恢复
08-03 14:40:26.144:D/AndroidRuntime(255):关闭虚拟机
08-03 14:40:26.144:W/dalvikvm(255):threadid=3:线程以未捕获异常退出(组=0x4001b188)
08-03 14:40:26.144:E/AndroidRuntime(255):未捕获处理程序:由于未捕获异常而退出主线程
08-03 14:40:26.154:E/AndroidRuntime(255):java.lang.RuntimeException:无法恢复活动{com.codeskraps.talarkam/com.codeskraps.talarkam.talarkamaActivity}:java.lang.NullPointerException:uriString
08-03 14:40:26.154:E/AndroidRuntime(255):在android.app.ActivityThread.performResumeActivity(ActivityThread.java:2950)
08-03 14:40:26.154:E/AndroidRuntime(255):位于android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2965)
08-03 14:40:26.154:E/AndroidRuntime(255):位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2516)
08-03 14:40:26.154:E/AndroidRuntime(255):在android.app.ActivityThread.access$2200(ActivityThread.java:119)
08-03 14:40:26.154:E/AndroidRuntime(255):位于android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
08-03 14:40:26.154:E/AndroidRuntime(255):在android.os.Handler.dispatchMessage(Handler.java:99)上
08-03 14:40:26.154:E/AndroidRuntime(255):在android.os.Looper.loop(Looper.java:123)
08-03 14:40:26.154:E/AndroidRuntime(255):位于android.app.ActivityThread.main(ActivityThread.java:4363)
08-03 14:40:26.154:E/AndroidRuntime(255):位于java.lang.reflect.Method.Invokenactive(本机方法)
08-03 14:40:26.154:E/AndroidRuntime(255):在java.lang.reflect.Method.invoke(Method.java:521)
08-03 14:40:26.154:E/AndroidRuntime(255):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
08-03 14:40:26.154:E/AndroidRuntime(255):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
08-03 14:40:26.154:E/AndroidRuntime(255):在dalvik.system.NativeStart.main(本机方法)
08-03 14:40:26.154:E/AndroidRuntime(255):由以下原因引起:java.lang.NullPointerException:uriString
08-0314:40:26.154:E/AndroidRuntime(255):在android.net.Uri$StringUri。(Uri.java:420)
08-0314:40:26.154:E/AndroidRuntime(255):在android.net.Uri$StringUri。(Uri.java:410)
08-03 14:40:26.154:E/AndroidRuntime(255):位于android.net.Uri.parse(Uri.java:382)
08-03 14:40:26.154:E/AndroidRuntime(255):在com.codeskraps.talarkam.talarkamaActivity.onResume上(talarkamaActivity.java:108)
08-03 14:40:26.154:E/AndroidRuntime(255):在android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1149)上
08-03 14:40:26.154:E/AndroidRuntime(255):在android.app.Activity.performResume(Activity.java:3763)
08-03 14:40:26.154:E/AndroidRuntime(255):在android.app.ActivityThread.performResumeActivity(ActivityThread.java:2937)

错误在
onResume()中:

如果此首选项不存在,则默认为
null
,这将导致NullPointerException

编辑添加的代码建议以摆脱NPE

在您的
onResume()中替换此代码。

使用此代码:

Ringtone ringtone = null;
String toneString = prefs.getString(TONE, null);
if (toneString != null) {
    Uri alarmUri = Uri.parse(toneString);
    ringtone = RingtoneManager.getRingtone(this, alarmUri);
}
if (ringtone != null) {
    String name = ringtone.getTitle(this);
    btnSetTone.setText(name);
} else {
    btnSetTone.setText(getString(R.string.btn_SetAlarmTone));
}

由于您还没有发布完整的代码,因此很难准确地找出失败的代码行(第108行?)。但我的猜测是以下几行是根本原因:

Uri alarmUri=Uri.parse(prefs.getString(TONE,null))


它在prefs中找不到音调键/对象,并将默认值设置为null。

108=Log.d(标记“onPause”);我编辑了你的帖子。问题不在于它无法编译。显然,它编译得很好。问题是它不会运行。谢谢。对不起,麻烦了。嗯,怎么解决这个问题?我不知道应用程序。看起来应该在共享首选项中使用键
TONE
存储一些内容,但是没有;那里什么也没有。查看在共享首选项中设置该值的代码,看看是否正在执行该值。private static final String TONE=“TONE”;好吧,我假设偏好音调应该被其他调用这个的活动存储在那里。您发布的代码中没有任何明显的内容。来自MainActivity的代码仍然没有多少帮助。在任何情况下,我都编辑了我的答案,以显示如何绕过NullPointerException。也许这会让你走得更远,这样你就可以解决你的问题了。private static final String TONE=“TONE”;
Uri alarmUri = Uri.parse(prefs.getString(TONE, null));
Ringtone ringtone = RingtoneManager.getRingtone(this, alarmUri);
if (ringtone != null) {
    String name = ringtone.getTitle(this);
    btnSetTone.setText(name);
} else
    btnSetTone.setText(getString(R.string.btn_SetAlarmTone));
Ringtone ringtone = null;
String toneString = prefs.getString(TONE, null);
if (toneString != null) {
    Uri alarmUri = Uri.parse(toneString);
    ringtone = RingtoneManager.getRingtone(this, alarmUri);
}
if (ringtone != null) {
    String name = ringtone.getTitle(this);
    btnSetTone.setText(name);
} else {
    btnSetTone.setText(getString(R.string.btn_SetAlarmTone));
}