2016-08-07 4 views
-3

インタフェース: 私はどのようにバックグラウンドスレッドで改造を実行するには、テキストとその結果バックグラウンドスレッドでレトロフィットを実行するにはどうすればよいですか?

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

ボタンにして出力をクリックして単語を入力してください?

私は結果をテキストし、ボタンをクリックし、出力のための単語、簡単なトランスレータを入力して、私はこのライブラリをテスト

+1

例外名はすべてを示します。 – Vucko

+0

@Vucko コードを変更する方法を理解できません。ドキュメントを読む – upward

+0

'execute()'の代わりに 'enqueue()を使用してください。 – EpicPandaForce

答えて

5

call.execute();は、メインスレッド上で実行するべきではありません、同期ネットワーク呼び出しです。 彼らはあなたに指摘したように、あなたが持っている最高のオプションは、以下のようなcall.enqueue()を使用することです:

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) { 

    } 

呼び出しが成功した場合、あなたはCOMではonFailure

+0

トピックを更新しましたが、私のコードが正しくないことを確認していません – upward

+0

投稿した写真の行番号 1)あなたは呼出しに可変応答を割り当てる必要はありません。必要です。 'call.enqueue(...)'を実行し、 'onResponse()'メソッドの中であなたの応答を得るだ​​けです。 上記の編集された回答をご覧ください –

1

に他onResponseであなたの応答を取得します。 squareup.retrofit2:改造: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"); 

     } 
    }); 
関連する問題