2017-11-27 4 views
-4

Wie würde ich dieses Code-Snippet in ein Formular umschreiben, das java.lang.NullPointerException nicht erzeugt? java.lang.NullPointerException getDouble

Intent bank_Amount_Intent = getIntent(); 
Bundle bundle = bank_Amount_Intent.getExtras(); 
double buyin_Money = bundle.getDouble("buyin", 0); 
total = buyin_Money; 
bank_Amount.setText(String.valueOf(currency_Format.format(buyin_Money))); 
+1

durch Instanziieren von Variablen vor dem Versuch, auf ihre Mitglieder zuzugreifen, oder durch Null-Checks – Stultuske

Antwort

-2
try{ 
     Intent bank_Amount_Intent = getIntent(); 
     Bundle bundle = bank_Amount_Intent.getExtras(); 
     double buyin_Money = bundle.getDouble("buyin", 0); 
     total = buyin_Money; 
     bank_Amount.setText(String.valueOf(currency_Format.format(buyin_Money))); 
} 
catch(Exception e) 
{ 
e.printStackTrace(); 
} 

dies keine Ausnahme produzieren, aber wenn Sie versuchen, auf Null-Objekt zu arbeiten, dann werden Sie kein Ergebnis erhalten können.

glückliche Codierung !!

+0

Es funktionierte die ersten drei Male, aber jetzt gibt es mir den Fehler wieder ... –

+0

Können Sie den Fehler buchen? –

+0

java.lang.RuntimeException: Aktivität kann nicht gestartet werden ComponentInfo {com.beispiel.chan.blackjack/com.beispiel.chan.blackjack.MainActivity}: java.lang.NullPointerException: Versuch, die virtuelle Methode 'java.lang.String java aufzurufen .lang.String.trim() 'für einen Nullobjektverweis –

0

Als erstes müssen Sie bestimmen, welche Variable null ist, so verwenden Sie den Debugger oder gehen Sie wie folgt:

public int yourFunction(){ 
    Intent bank_Amount_Intent = getIntent(); 
    if (bank_Amount_Intent == null) { 
     System.out.println("bank_Amount_Intent is null"); 
     return -1; //error #1 
    } 

    Bundle bundle = bank_Amount_Intent.getExtras(); 
    if (bundle == null) { 
     System.out.println("bundle is null"); 
     return -2; //error #2 
    } 

    double buyin_Money = bundle.getDouble("buyin", 0); 
    total = buyin_Money; // assuming "total" also is a double 
    bank_Amount.setText(String.valueOf(currency_Format.format(buyin_Money))); 
    return 0; //no error 
} 

Sie dann in der Konsole sehen können, welcher Wert null war. Sie können den zurückgegebenen Wert auch verwenden, um den Fehlercode dieser Funktion zu ermitteln.

Wenn Sie wissen, welcher Wert war null, können Sie zwei Dinge tun: beurteilen, ob Sie es null oder nicht

behalten möchten Wenn Sie einen Nullwert in diesem Verfahren zu halten zustimmen, können Sie es verwenden, um pop einen Fehler oder was auch immer Sie mit einem Nullwert machen möchten

Wenn Sie keinen Nullwert möchten, können Sie eine Instanz eines Objekts des gewünschten Typs erstellen. zB wenn bundle null war, können Sie dazu: bundle = new Bundle();. Oder Sie können vorzugsweise überprüfen, warum dieser Wert an erster Stelle Null ist und den Fehler korrigieren. Es ist möglich, dass eine andere Funktion null zurückgibt und Sie nur die NullPointerException in der Ausführung weiter erhalten.

0

Nun, ich werde spekulieren basierend auf der kleinen Menge an Code gezeigt. Seit currency_Format ist es nur gezeigt, dass es verwendet wird, vorausgesetzt, Sie haben es erfolgreich instanziiert, so dass es nicht die Quelle der Ausnahme ist.

Das lässt nur bank_Amount_Intent und bündeln.

Während getIntent in einigen extremen Fällen einen NULL-Wert zurückgibt, ist mein Einsatz auf Bundle gesetzt. Sie gehen davon aus, dass die Absicht einen Bundle hat und sich möglicherweise dort befindet, wo sich der Nullzeiger befindet.

versuchen double buyin_Money = bundle == null ? 0: bundle.getDouble("buyin", 0);

auf diese Weise zuerst, wenn das Bündel, wenn null zu überprüfen, und wenn es in der Tat null stellen Sie den Wert 0 für die Variable.

Verwandte Themen