2016-05-17 8 views
0

Ich bin nur ein Anfänger in Android-Entwicklung. Ich kam durch diesen Fehler, wenn ich versuche, den Text unter Verwendung ".setText()" für eine Textansicht zu setzen, sagt es, dass es Nullzeigerausnahme produzieren kann. Ich stecke fest und weiß nicht, was ich tun soll! Bitte bitte bitte Helfen Sie mir Jungs!Methode Aufruf kann Java NullpointerException .setText()

Vielen Dank im Voraus !!!

private void runTimer() 
    { 

    final TextView timeView = (TextView) findViewById(R.id.display_time); 
    final Handler handler =new Handler(); 

    handler.post(new Runnable(){ 
     @Override 

     public void run() { 
       int hours = seconds/3600; 
       int minutes = (seconds%3600)/60; 
       int secs = seconds%60; 
       String time = String.format(Locale.US,"%d:%02d:%02d", 
         hours, minutes, secs); 
       timeView.setText(time);//this is where i am getting the warning! 
       if (running) { 
        seconds++; 
       } 
      handler.postDelayed(this,1000); 
     } 
    }); 

} 
+2

Diese Warnung ist ** kein Big Deal ** nennen. Bleib nicht hängen, mach einfach weiter, es wird kein nullpointer erzeugt, wenn du die TextView 'display_time' in xml hast. !! –

+0

Wo haben Sie diesen Teil des Codes platziert? Es muss sich in der Aktivität befinden, in der die xml-Layoutdatei als contentView festgelegt ist. – Opiatefuchs

Antwort

0
  1. Stellen Sie sicher, rufen runTimmer() nach setContentView oder wenn in Fragment in onViewCreated()

  2. Stellen Sie sicher, ID: display_time ist eigentlich die echte ID des Textview Sie verwenden möchten, überprüfen Sie die xml Datei.

  3. kann nur der UI-Thread Änderungen vornehmen, um die Ansichten, so müssen Sie runOnUiThread(new Runnable());

1

Vielleicht könnten Sie einen Scheck um es wie folgt einpacken, für den Seelenfrieden.

private void runTimer() 
{ 

    final TextView timeView = (TextView) findViewById(R.id.display_time); 
    final Handler handler =new Handler(); 

    handler.post(new Runnable(){ 
     @Override 

     public void run() { 
      int hours = seconds/3600; 
      int minutes = (seconds%3600)/60; 
      int secs = seconds%60; 
      String time = String.format(Locale.US,"%d:%02d:%02d", 
        hours, minutes, secs); 
      if (timeView != null) { 
       timeView.setText(time);//this is where i am getting the warning! 
      } 
      if (running) { 
       seconds++; 
      } 
      handler.postDelayed(this,1000); 
     } 
    }); 

} 

Für den Fall, dass timeView aus irgendeinem Grund (Ihre Aktivität beendet?) Null ist, wird kein NPE geworfen werden.

+0

Ist es eine allgemeine Vorgehensweise? – Defozo

1

Überprüfen Sie R.id.display_time, wenn es im selben Layout auf die TextView zeigt. als deine Aktivität.

Verwandte Themen