2016-08-25 83 views
-1

我已经创建了一些Pojo模型,我从api获取数据到我的android应用程序。数据应该点击按钮下载。改装引发错误

这里是我是如何做到这一点:

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

    } 
} 

所以问题就在这里。当我点击按钮时,它给了我一个通知(敬酒)“没有合作伙伴!”。 当我再次点击它会引发我一个错误:

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

在这条线在按钮的onClick方法:

callPartners.enqueue(DownloadMain.this); 

我无法弄清楚,为什么改造没有得到任何数据。

问题:有人可以帮我解决这个问题吗?

回答

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