1

これは、null ポインター例外を取得しているコードです。

SimpleDateFormat df = new SimpleDateFormat("MMMM dd, yyyy");
String temp = df.format(load.getDeliveryDate());
System.out.println(temp);
date.setText(temp);

これは、ランダムな日付を作成するコードです(テストデータ用):

private Date randomDate(){
    int month, year, day;  
    Random call = new Random();  
    month = call.nextInt(12); 
    year = call.nextInt(2012);
    day  = call.nextInt(31);
    Date toReturn = new Date(year, month, day);
    System.out.println(toReturn.toString());
    return toReturn;
}

もともと、日付項目のテキストを設定している行でエラーが発生していました。現在、日付形式の宣言行でもエラーが発生しています。

null でないことを確認するために、既に負荷をチェックしています。Date 属性を含むカスタム クラスです。

Logcat 出力 (再構築後):

04-30 12:56:10.423: E/AndroidRuntime(8212): FATAL EXCEPTION: main
04-30 12:56:10.423: E/AndroidRuntime(8212): java.lang.NullPointerException
04-30 12:56:10.423: E/AndroidRuntime(8212):     at java.util.Calendar.setTime(Calendar.java:1325)
04-30 12:56:10.423: E/AndroidRuntime(8212):     at java.text.SimpleDateFormat.formatImpl(SimpleDateFormat.java:536)
04-30 12:56:10.423: E/AndroidRuntime(8212):     at java.text.SimpleDateFormat.format(SimpleDateFormat.java:818)
04-30 12:56:10.423: E/AndroidRuntime(8212):     at java.text.DateFormat.format(DateFormat.java:376)
4

2 に答える 2

2

投稿したスタック トレースによると、日付形式は null ではありませんが、日付は (おそらく) null です。

04-30 12:56:10.423: E/AndroidRuntime(8212):     at java.text.DateFormat.format(DateFormat.java:376)

スタック トレースのこの行は、これが日付の書式設定に問題があることを示しています。しかし、そこにフォーマット オブジェクトが存在することもわかります。オブジェクトが文字列 (null ポインタではない) で初期化されていることがわかっており、そのようなライブラリの内部バグは非常にまれです。

load.getDeliveryDate()そのため、日付を返す呼び出しに何か問題がある可能性がありnullます。あなたはまだこれを投稿していないので、私は本当にコメントすることはできません.

質問で次のように説明します。

もともと、日付項目のテキストを設定している行でエラーが発生していました。現在、日付形式の宣言行でもエラーが発生しています。

これは明らかに null にできないため、デバイスで実行されているコードと IDE で実行されているコード (Eclipse?) の間に不一致があるようです。

これは時々発生する可能性があります。何らかの理由で、一部またはすべてのクラスの新しいバージョンでアプリケーションが更新されません。これが起こったという証拠が得られたら (そう思われます)、最善の方法は、アプリを完全にアンインストールし、プロジェクト全体をクリーンアップすることです。その後アプリを実行しようとすると、完全にクリーンなコピーがデバイスにプッシュされるため、デバッグがはるかに簡単になります。

于 2013-04-30T17:01:17.970 に答える
-1

new Date(int year, int month, int day) は非推奨です。代わりにグレゴリオ暦を使用できます

public static void main(String[] args) {
    SimpleDateFormat df = new SimpleDateFormat("MMMM dd, yyyy");
    String temp = df.format(randomDate());
    System.out.println(temp);
}

private static Date randomDate(){
    int month, year, day;  
    Random call = new Random();  
    month = call.nextInt(11); // month -> 0 to 11 for gregorian calendar
    year = call.nextInt(2012);
    day  = call.nextInt(31);
    GregorianCalendar cal = new GregorianCalendar();
    cal.set(Calendar.YEAR, year);
    cal.set(Calendar.DAY_OF_MONTH, day);
    cal.set(Calendar.MONTH, month);
    Date toReturn = cal.getTime();
    System.out.println(toReturn.toString());
    return toReturn;
}

NullPointerException を受け取った場合、フィールドは null でなければなりません。使うだけ

 if(date != null)
       date.setText(temp);
于 2013-04-30T16:46:59.357 に答える