2016-08-07 35 views
-3

Schnittstelle: gebe ich das Wort auf den Knopf, um Text und klicken Sie dann auf und in der Ausgabe eine Nachrüstung im Hintergrund-Thread ausgeführt ErgebnisWie führe ich ein Retrofit im Hintergrund-Thread durch?

public interface Link { 
    @FormUrlEncoded//аннотация 
    @POST("https://translate.yandex.net/api/v1.5/tr.json/translate") 
    Call<Object> translate(@FieldMap Map<String,String> map); 
} 

enter image description here

Wie?

ich das Wort geben Sie das Ergebnis, einfache Übersetzer in Text und klicken Sie dann auf die Schaltfläche und in der Ausgabe, ich diese Bibliothek testen

+1

Ausnahme Name sagt Ihnen alles. – Vucko

+0

@Vucko Ich verstehe nicht, wie zu vermeiden, wie Sie den Code zu ändern, lesen Sie die Dokumentation – upward

+0

Verwendung 'enqueue()' statt 'execute()' – EpicPandaForce

Antwort

5

call.execute(); ist ein synchrones Netzwerk Anruf, der nicht auf dem Haupt-Thread ausgeführt werden soll. wie sie sich darauf hingewiesen haben, ist die beste Option, die Sie haben, ist call.enqueue() wie unten zu verwenden:

call.enqueue(new Callback<Object>() { 
    @Override 
    public void onResponse(Call<Object> call, Response<Object> response) { 
     response = response.body(); 
    } 

    @Override 
    public void onFailure(Call<Object> call, Throwable t) { 

    } 

Wenn der Aufruf erfolgreich ist, können Sie Ihre Antwort in onResponse sonst bekommen in onFailure

+0

Ich habe das Thema aktualisiert, bin aber nicht sicher, ob mein Code richtig ist. – upward

+0

Zeile 10 aus dem von Ihnen geposteten Bild, 1) Sie müssen dem Aufruf keine variable Antwort zuweisen, dh 'response =' ist nicht erforderlich. Rufen Sie einfach 'call.enqueue (...)' auf und rufen Sie Ihre Antwort in der 'onResponse()' Methode ab. Siehe die bearbeitete Antwort oben –

1

Mit com. quadupup.retrofit2: Nachrüstung: 2.1.0

call.enqueue(new Callback<ResponseBody>() { 
     @Override 
     public void onResponse(Call<ResponseBody> call1, retrofit2.Response<ResponseBody> response) { 


      BufferedReader reader = null; 
      StringBuilder sb = new StringBuilder(); 

      reader = new BufferedReader(new InputStreamReader(response.body().byteStream())); 
      String line; 
      try { 
       while ((line = reader.readLine()) != null) { 
        sb.append(line); 
       } 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      result = sb.toString(); 
      } 

     @Override 
     public void onFailure(Call<ResponseBody> call, Throwable t) { 
      Log.e("Tag","onResponse onFailure"); 

     } 
    });