2

編集:

カレンダー オブジェクトに時と分の値を設定しようとしてエラーが発生しました。

アプリでタイム ピッカーの時間と分の値を設定しようとしています。

データベースに文字列として保存されている時間値があります。この値を Date オブジェクトに解析しましたが、時間と分の値を取得してピッカー自体を設定する方法が正確にはわかりません。

つまり、時刻が午後 8 時 30 分に保存されている場合、クラスの onCreate メソッドを使用してタイム ピッカーにこれを設定したいと考えています。

これまでの私のコードは次のとおりです。

     DateFormat newFormat = new SimpleDateFormat("hh:mm");
     try 
    {
    dateToEdit = newFormat.parse(returnedTime);
    } catch (ParseException e)
    {

        e.printStackTrace();
    }     


     Calendar cal = Calendar.getInstance();
     cal.setTime(dateToEdit);
     editTimePicker.setCurrentHour(Calendar.HOUR_OF_DAY);
     editTimePicker.setCurrentMinute(Calendar.MINUTE);

エラーを示すログの猫

01-29 21:58:47.860: D/AndroidRuntime(269): Shutting down VM
01-29 21:58:47.870: W/dalvikvm(269): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
01-29 21:58:47.890: E/AndroidRuntime(269): FATAL EXCEPTION: main
01-29 21:58:47.890: E/AndroidRuntime(269): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.flybase2/com.example.flybase2.AppointmentEditChanges}: java.lang.NullPointerException
01-29 21:58:47.890: E/AndroidRuntime(269):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
01-29 21:58:47.890: E/AndroidRuntime(269):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
01-29 21:58:47.890: E/AndroidRuntime(269):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)
01-29 21:58:47.890: E/AndroidRuntime(269):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
01-29 21:58:47.890: E/AndroidRuntime(269):  at android.os.Handler.dispatchMessage(Handler.java:99)
01-29 21:58:47.890: E/AndroidRuntime(269):  at android.os.Looper.loop(Looper.java:123)
01-29 21:58:47.890: E/AndroidRuntime(269):  at android.app.ActivityThread.main(ActivityThread.java:4627)
01-29 21:58:47.890: E/AndroidRuntime(269):  at java.lang.reflect.Method.invokeNative(Native Method)
01-29 21:58:47.890: E/AndroidRuntime(269):  at java.lang.reflect.Method.invoke(Method.java:521)
01-29 21:58:47.890: E/AndroidRuntime(269):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
01-29 21:58:47.890: E/AndroidRuntime(269):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
01-29 21:58:47.890: E/AndroidRuntime(269):  at dalvik.system.NativeStart.main(Native Method)
01-29 21:58:47.890: E/AndroidRuntime(269): Caused by: java.lang.NullPointerException
01-29 21:58:47.890: E/AndroidRuntime(269):  at com.example.flybase2.AppointmentEditChanges.onCreate(AppointmentEditChanges.java:100)
01-29 21:58:47.890: E/AndroidRuntime(269):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
01-29 21:58:47.890: E/AndroidRuntime(269):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
4

2 に答える 2

1

a を使用しCalendarて、日付オブジェクトからタイムアウトを取得できます。

Calendar cal = Calendar.getInstance();
cal.setTime( dateToEdit );
timePicker.setCurrentHour( cal.get( HOUR_OF_DAY ) );
timePicker.setCurrentMinute( cal.get( MINUTE ) );

timePicker上記を行う前に、次のいずれかの方法で作成する必要があります

timePicker = (TimePicker)findViewById( R.id.my_time_picker );

また

timePicker = new TimePicker( this );

2 番目のケースでは、何らかの方法でレイアウトに追加する必要があります。

于 2013-01-29T20:42:06.027 に答える
0

日付と時刻を文字列としてデータベースに保存しないでください(タイムゾーンなどを忘れないでください)。

代わりに、エポックからのミリ秒数をGMTタイムゾーン(long値)に保存します。

そのような時間は簡単に得ることができますDate.getTime()

その後、それを再度使用して、日付またはカレンダーを再度作成できます。

Calendar cal = new GregorianCalendar(myTimeZone);
cal.setTimeInMillis(myDbTime);

また、 Joda Timeを支持して、放っjava.util.Dateておくことを強くお勧めします。java.util.Calendar

于 2013-01-29T20:57:30.253 に答える