2017-08-20 2 views
-1

Also verwende ich OkHttp in einem separaten Dienst, um Daten von der Twitter-API zu holen. Ich habe versucht, den Benutzer zu warnen, dass Tweets ohne eine Internetverbindung nicht geladen werden können. Aber wenn ich das versuche, stürzt die Anwendung ab. Der Fehler ist: java.lang.RuntimeException: Kann Handler innerhalb des Fadens nicht herstellen, der Looper.prepare() nicht genannt hat. Hier ist der CodeWie man einen Toast in einer OnFailure-Methode macht

private void getTweets(final String topic) { 
    final TwitterService twitterService = new TwitterService(); 
    twitterService.findTweets(topic, new Callback() { 
     @Override 
     public void onFailure(Request request, IOException e) { 
      e.printStackTrace(); 
      Log.e("Traffic Activity", "Failed to make API call"); 
      Toast.makeText(getApplicationContext(), "Bigger fail", Toast.LENGTH_LONG).show(); 

     } 

Antwort

0

Sie es von einem Worker-Thread aufrufen. Sie müssen Toast.makeText() (und die meisten anderen Funktionen, die die Benutzeroberfläche betreffen) innerhalb des Hauptthreads aufrufen. Sie könnten einen Handler verwenden, zum Beispiel

// dies bis in UI-Thread gesetzt

mHandler = new Handler(Looper.getMainLooper()) { 
@Override 
public void handleMessage(Message message) { 
    // This is where you do your work in the UI thread. 
    // Your worker tells you in the message what to do. 
} 

};

void workerThread() { 
// And this is how you call it from the worker thread: 
Message message = mHandler.obtainMessage(command, parameter); 
message.sendToTarget(); 

}

Verwandte Themen