【发布时间】:2016-07-28 11:01:23
【问题描述】:
我正在使用Retrofit 2.0 进行嵌套多个请求的 api 调用。所有 api 单独工作正常。
但是当我嵌套所有改造时,第一个请求完美执行,但之后当我注册第二个请求时,它不是enqueue 方法中的回调(即它直接返回null 而不插入enqueue's 内部方法,如onResponse,onFailure )
我的代码:-
public class Main2Activity extends AppCompatActivity {
Gson gson;
JSONObject jsonResult=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
gson=new GsonBuilder().create();
firstRequest(); //-- First retrofit request
}
private void firstRequest() {
Retrofit retrofit=new Retrofit.Builder().baseUrl(getResources().getString(R.string.Api_Url)).addConverterFactory(GsonConverterFactory.create(gson)).build();
CityRetailsApi service = retrofit.create(CityRetailsApi.class);
Call call_first= service.getMainCatFlag();
call_first.enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
Log.d("MainActivity", "Status Code = " + response.code());
if (response.isSuccessful()){
MainCatFlag result = (MainCatFlag) response.body(); //-- Get First request response
JSONObject json2nd = secondRequest(); //-- Second request
}
}
@Override
public void onFailure(Call call, Throwable t) {
Log.d("MainActivity", "Error");
}
});
}
private JSONObject secondRequest() {
try {
Retrofit retrofit=new Retrofit.Builder().baseUrl(getResources().getString(R.string.Api_Url)).addConverterFactory(GsonConverterFactory.create(gson)).build();
CityRetailsApi service = retrofit.create(CityRetailsApi.class);
Call call_second= service.getMainCat();
call_second.enqueue(new Callback() {
@Override
public void onResponse(Call call2, Response response1) {
Log.d("MainActivity", "Status Code = " + response1.code());
if (response1.isSuccessful()) {
MainCat result = (MainCat) response1.body();
if (result.getSuccess()==1)
{
try {
jsonResult= new JSONObject(new Gson().toJson(result));
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}
@Override
public void onFailure(Call call, Throwable t) {
Log.d("MainActivity", "Error");
}
});
}catch (Exception e){
Log.d("MainActivity", "Error= " + e);
}
return jsonResult;
}
}
在上面的代码中firstRequest() 正确执行并证明了响应,但secondRequest(在 firstRequest() 入队方法中)不能正常工作。没有显示任何错误,控制台中的成功消息。谁能帮我解决这个问题。
如果我的代码有任何问题,请告诉我。 提前谢谢你。
【问题讨论】:
-
您是否运行调试器以确保 response.isSuccessful 为真?
-
@Ben:是的,它返回了我的成功状态,并且还转到了我的 secondRequest() 函数。但我的问题是它没有执行 call_second.enqueue(.....) 方法。
-
对不起,我真的很难过一切对我来说都是正确的。我有类似的代码,唯一不同的是我的回调不是匿名内部类,所以即使不应该这样做,也可能会有所不同。