2016-08-25 23 views
-1

私はいくつかのPojoモデルを作成しました。私はAndroidアプリケーションにapiからデータを取得しています。データはボタンクリックでダウンロードする必要があります。だから、問題はここにあるRetrofitでエラーが発生しました

public class DownloadMain extends Fragment implements Callback<Partner> { 

    private static final String TAG = DownloadMain.class.getSimpleName(); 

    private Button dloadPartners; 
    private Call callPartners; 

    public DownloadMain() {} 

    public DownloadMain newInstance() { return new DownloadMain(); } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 


     View view = inflater.inflate(R.layout.download_main, container, false); 

     dloadPartners = (Button) view.findViewById(R.id.downloadPartners); 
     dloadPartners.setOnClickListener(btnListener); 

     callPartners = APIHelper.getApiService().getPartners(); 

     return view; 
    } 

    Button.OnClickListener btnListener = (new Button.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      callPartners.enqueue(DownloadMain.this); 
     } 
    }); 

    @Override 
    public void onResponse(Call call, Response response) { 

     if(response.body() == null) { 
      try { 
       response.errorBody().string(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      Toast.makeText(getActivity(), "No Partners!", Toast.LENGTH_SHORT).show(); 
     } else { 
      List<Partner> partners = (List<Partner>) response.body(); 
      Log.d(TAG, "Number of partners received: " + partners.size()); 
     } 

    } 

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

    } 
} 

:ここ

は、私はこれを作った方法です。私がボタンをクリックすると、それは私に通知(トースト)「パートナーなし!」を与えます。 そして、私はもう一度クリックしたときに、それは私にエラーがスローされます:改造は、任意のデータを取得していない理由を私はそれを把握することはできません

callPartners.enqueue(DownloadMain.this); 

:ボタンのonClickメソッドでは、この行で

IllegalStateException: Already executed. at retrofit2.OkHttpCall.enqueue(OkHttpCall.java:78)

を。

質問:誰かがこの問題の解決に手伝ってもらえますか?

答えて

1

一度だけ電話をかけることができます。より多くの呼び出しを行う必要がある場合は、クローンを使用してください。 javadocから :

An invocation of a Retrofit method that sends a request to a webserver and returns a response. Each call yields its own HTTP request and response pair. Use clone() to make multiple calls with the same parameters to the same webserver; this may be used to implement polling or to retry a failed call.

は、基本的にコードがこれが問題の一部を

callPartners.clone().enqueue(DownloadMain.this); 
+0

解決しなければなりません。まだ私はAPIから任意のパートナーを得ることができません – RubyDigger19

関連する問題