【问题标题】:App crashes during creation DatePickerDialog创建 DatePickerDialog 期间应用程序崩溃
【发布时间】:2011-09-16 16:34:47
【问题描述】:

我对 Android 平台上的编程完全陌生,但我有兴趣了解更多。目前,我正在逐步手册的帮助下进行此操作。只是为了让自己熟悉编程环境。我有 Java 语言的知识,虽然我不会说我擅长它。

至于问题,我正在创建的是一款适用于 Android 设备的简单问答游戏。在设置屏幕上,我使用 DatePickerDialog 作为用户生日。只有当我在我的 Android 设备 (Samsung Galaxy S i9000) 或模拟器上运行它时,它才会在尝试弹出 DatePickerDialog 时崩溃。

我使用的代码是:

final TextView dob = (TextView) findViewById(R.id.TextView_DOB_Info);
DatePickerDialog dateDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
        Time dateOfBirth = new Time();
        dateOfBirth.set(dayOfMonth, monthOfYear, year);
        long dtDob = dateOfBirth.toMillis(true);
        dob.setText(DateFormat.format("MMMM dd, yyyy", dtDob));
        Editor editor = mGameSettings.edit();
        editor.putLong(GAME_PREFERENCES_DOB, dtDob);
        editor.commit();
    }
}, 0, 0, 0);
return dateDialog;

谁能看看我在这里做错了什么?运行时,我在该方法中得到 IllegalArgumentException。我正在使用 Eclipse 为 Android 编程,但我对该程序也相当陌生(我对 Netbeans 更熟悉),我仍在尝试弄清楚如何通过 Android 应用程序正确调试。

如果有人可以提供帮助,我们将不胜感激! 亲切的问候, 弗洛里斯

编辑:根据要求,我添加了 LogCat 行:

09-16 18:42:22.386: ERROR/AndroidRuntime(20074): FATAL EXCEPTION: main
09-16 18:42:22.386: ERROR/AndroidRuntime(20074): java.lang.IllegalArgumentException: current should be >= start and <= end
09-16 18:42:22.386: ERROR/AndroidRuntime(20074):     at android.widget.NumberPicker.setCurrent(NumberPicker.java:362)
09-16 18:42:22.386: ERROR/AndroidRuntime(20074):     at android.widget.DatePicker.updateDaySpinner(DatePicker.java:487)
09-16 18:42:22.386: ERROR/AndroidRuntime(20074):     at android.widget.DatePicker.updateSpinners(DatePicker.java:471)
09-16 18:42:22.386: ERROR/AndroidRuntime(20074):     at android.widget.DatePicker.init(DatePicker.java:467)
09-16 18:42:22.386: ERROR/AndroidRuntime(20074):     at android.app.DatePickerDialog.<init>(DatePickerDialog.java:154)
09-16 18:42:22.386: ERROR/AndroidRuntime(20074):     at android.app.DatePickerDialog.<init>(DatePickerDialog.java:113)
09-16 18:42:22.386: ERROR/AndroidRuntime(20074):     at com.androidbook.triviaquiz.QuizSettingsActivity.onCreateDialog(QuizSettingsActivity.java:404)
09-16 18:42:22.386: ERROR/AndroidRuntime(20074):     at android.app.Activity.onCreateDialog(Activity.java:2482)
09-16 18:42:22.386: ERROR/AndroidRuntime(20074):     at android.app.Activity.createDialog(Activity.java:882)
09-16 18:42:22.386: ERROR/AndroidRuntime(20074):     at android.app.Activity.showDialog(Activity.java:2557)
09-16 18:42:22.386: ERROR/AndroidRuntime(20074):     at android.app.Activity.showDialog(Activity.java:2524)
09-16 18:42:22.386: ERROR/AndroidRuntime(20074):     at com.androidbook.triviaquiz.QuizSettingsActivity$4.onClick(QuizSettingsActivity.java:367)
09-16 18:42:22.386: ERROR/AndroidRuntime(20074):     at android.view.View.performClick(View.java:2538)
09-16 18:42:22.386: ERROR/AndroidRuntime(20074):     at android.view.View$PerformClick.run(View.java:9152)
09-16 18:42:22.386: ERROR/AndroidRuntime(20074):     at android.os.Handler.handleCallback(Handler.java:587)
09-16 18:42:22.386: ERROR/AndroidRuntime(20074):     at android.os.Handler.dispatchMessage(Handler.java:92)
09-16 18:42:22.386: ERROR/AndroidRuntime(20074):     at android.os.Looper.loop(Looper.java:123)
09-16 18:42:22.386: ERROR/AndroidRuntime(20074):     at android.app.ActivityThread.main(ActivityThread.java:3687)
09-16 18:42:22.386: ERROR/AndroidRuntime(20074):     at java.lang.reflect.Method.invokeNative(Native Method)
09-16 18:42:22.386: ERROR/AndroidRuntime(20074):     at java.lang.reflect.Method.invoke(Method.java:507)
09-16 18:42:22.386: ERROR/AndroidRuntime(20074):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
09-16 18:42:22.386: ERROR/AndroidRuntime(20074):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
09-16 18:42:22.386: ERROR/AndroidRuntime(20074):     at dalvik.system.NativeStart.main(Native Method)
09-16 18:42:22.414: ERROR/(14248): Dumpstate > /data/log/dumpstate_app_error

当我现在阅读它时,我注意到问题出在 NumberPicker 类中。只是为了确定,他在这里期待的数字是什么意思?

【问题讨论】:

  • 另外我想补充一下,如果您需要查看我的任何其他代码,请询问,我会提供。
  • 你能添加一些崩溃的 DDMS 日志吗?抛出异常的行是哪一行?
  • 完成,我已经编辑了原帖。

标签: android eclipse debugging datepicker illegalargumentexception


【解决方案1】:

我从未使用过DatePickerDialog,但据我所知,您使用的是0, 0, 0 作为年份、月份和月份参数。将这些设置为像2011, 9, 16 这样合乎逻辑的东西,看看是否有帮助。

编辑实际上您可能必须在 9 月使用 10,因为我认为它符合 Calendar 使用的 0-11 个月数字。

【讨论】:

  • 很奇怪,这确实成功了。根据我的书 0, 0, 0 应该是该方法的默认值 - 无论默认值是什么。所以基本上,如果在我手动编码默认日期之前没有存储生日?或者也许从资源文件中获取它.. 感谢您的帮助!如果您知道零为什么不起作用的原因,我很想听听,但我会在我的问题解决后将答案标记为正确。
  • @Floris:我得到的线索是IllegalArgumentException“current should be >= start and
  • 出于兴趣,我照你说的做了,我改变了参数,一次一个为“0”。结果是这样的,您可以将月份设置为“0”,但不能将日期或年份设置为。原因是我猜你已经提到过。月份符合 Calendar 类使用的 0-11 数字。
  • @Floris:很有意思——我怀疑可能是这样。在 Android 中处理日期和时间有时会很棘手,因为某些类的行为与其他类略有不同。祝你学习顺利。玩得开心。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多