2017-06-17 10 views
0

ich Fortschrittsbalken mit Hilfe der Handler von MainActivity bin modernisiert werden, aber es gibt den Fehler: kann nicht erstellt werden Handler Innengewinde, die Looper.prepare() nichtes sagt, dass looper.prepare muss aufgerufen werden,

genannt

Error

public class MainActivity extends AppCompatActivity { 
ProgressBar progressBar; 
Handler handler; 
Thread thread; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    progressBar = (ProgressBar) findViewById(R.id.progressBar); 
    thread = new Thread(new MyThread()); 
    thread.start(); 
    handler = new Handler() { 
     @Override 
     public void handleMessage(Message msg) { 
      progressBar.setProgress(msg.arg1); 
     } 
    }; 


} 

class MyThread implements Runnable { 

    @Override 
    public void run() { 
     Message message = Message.obtain(); 

     for (int i = 0; i < 100; i++) { 
      message.arg1 = i; 
      handler.sendMessage(message); 
      try { 
       Thread.sleep(100); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 

}

+0

Ihr Hintergrund-Thread hat keinen Looper, so dass es nicht Message.obtain() – EpicPandaForce

Antwort

0

Sie sollten nur Fortschrittsbalken auf dem Main Looper laufen. Hinzufügen

handler = new Handler(context.getMainLooper()) { 
..... 
} 

Sollte funktionieren.

+0

Nö es funktioniert nicht nennen – Harshawardhan

1

Der Fehler liegt daran, dass Sie Ihre Benutzeroberfläche von einem anderen Thread aktualisieren. Also, was Sie tun sollen, ist wie rufen Sie die Update-Methode auf Haupt-UI-Thread

handler = new Handler() { 
    @Override 
    public void handleMessage(Message msg) { 
      runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        // Do something on UiThread 
        // update progress 
       } 
      }); 
}; 
Verwandte Themen