使用嵌套改造2.0时,将多个GET请求排入队列

时间:2016-07-28 11:01:24

标签: android request retrofit2

我正在使用Retrofit 2.0通过嵌套多个请求来进行api调用。所有api的工作都很好。 但是当我嵌套所有改造时,第一个请求执行完美但在此之后当我注册第二个请求时,它不是enqueue方法中的回调(即它直接返回null而没有插入enqueue's内部方法,如{ {1}},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()(在firstRequest()内部排队方法中)不能正常工作。控制台中未显示任何错误,成功消息。任何人都可以帮我改写这个问题。

如果我的代码有问题,请告诉我。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

你犯了一个错误,当你使用改装enquene时,它被称为异步,所以你不能在回调方法之外得到结果!

因此,您应该在 onResponse 方法中处理结果,如下所示:

private void secondRequest() {
    try {             
        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));

                            // process your jsonResult here
                            ...

                        } 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);
    } 
}