2016-09-06 32 views
0

Ich bekomme eine NullPointerException, wenn ich formatiere Datum mit meiner StringUtils Klasse. Wenn ich es ohne StringUtils benutze, funktioniert es einfach gut.Datenbindung geben NullPointerException bei Verwendung mit statischen Methode

Ich habe die Importanweisung für StringUtils

Ich habe habe dieses Bild:

<TextView 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:layout_weight="1" 
    android:text="@{StringUtils.getFormattedDate(user.date)}" /> 

Das gibt mir einen Fehler in meiner StringUtils Methode:

public static String getFormattedDate(String unformattedDate) { 
     // unformattedDate will be in format of yyyy-mm-dd 
     // Convert it to d mmm, yyyy 
     SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); 
     String date = null; 
     try { 
      Date d = df.parse(unformattedDate); // <<--------- Here 
      SimpleDateFormat dateFormat = new SimpleDateFormat("d MMM, yyyy"); 
      date = dateFormat.format(d.getTime()); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 
     return date; 
    } 

Wenn ich mit Debugger überprüft, unformattedDate ist null von Anfang an. Die korrekte Methode wird aufgerufen, aber der übergebene Wert ist null. Das ist merkwürdig.

Wenn ich es so in der Layout-Datei verwenden:

<TextView 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:layout_weight="1" 
    android:text="@{user.date}" /> 

Es gibt mir keinen Fehler, und das Datum auf dem Bildschirm angezeigt wird!

Ich habe versucht, das Projekt zu reinigen und es erneut auszuführen. Aber kein Erfolg.

+0

wo und wann stellen Sie den Wert für 'user' ein? –

+0

Es wird async mithilfe der Firebase-Datenbank abgerufen. Ist das ein Problem? – kirtan403

Antwort

1

Datenbindungen sind null sicher selbst, aber das hält nicht die Werte als Parameter für die Verwendung. Da Sie die getFormattedDate() ändern können, stellen Sie sicher, dass es auch null-sicher ist. Du gibst bereits null zurück, wenn es trotzdem eine ParseException gibt.

public static String getFormattedDate(String unformattedDate) { 
    try { 
     SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); 
     Date d = df.parse(unformattedDate); 
     SimpleDateFormat dateFormat = new SimpleDateFormat("d MMM, yyyy"); 
     return dateFormat.format(d.getTime()); 
    } catch (Exception e) { 
     Log.w("StringUtils", "getFormattedDate", e); 
     return null; 
    } 
} 
+0

Das ist mehr vorzuziehen, denke ich. Vielen Dank! – kirtan403

1

Wenn Sie es zum ersten Mal ausführen user hat keinen Wert, bis Sie es von Firebase Datenbank bekommen, so user.date wird auch Null sein.

Put ternäre:

android:text="@{user.date==null ? `` : StringUtils.getFormattedDate(user.date)}" 
+0

Dies sollte funktionieren. Aber es kompiliert nicht. – kirtan403

+0

Was ist der Fehler, den Sie bekommen? –

+0

Es ist seltsam, dass es nur keinen spezifischen Fehler gibt und alle meine automatisch generierten Bindungsklassen nicht gefunden werden. Ich hatte diese Art von Fehler, wenn Sie 'android: text =" @ {user.amount} "' setzen, wo die Menge vom Typ 'double' ist. Das Setzen von 'android: text =" @ {String.valueOf (user.amount)} "' wird erfolgreich kompiliert. Dies ist der Fall, wenn Sie keinen spezifischen Fehler erhalten. Ich denke, Android Studio 2.1.3 lüftet immer noch, wenn es zu Datenbindungsfehlern kommt. – kirtan403

Verwandte Themen