Ich verwende Retrofit 2.0
, um API-Aufrufe mit verschachteln mehrere Anfragen. Alle api funktioniert individuell gut. Aber wenn ich alle Retrofit verschachtelt, führen erste Anforderung perfekt, aber nach, dass, wenn ich zweite Anforderung registrieren ist es nicht in enqueue
Methode Rückruf (dh es direkt null
Rückkehr ist enqueue's
innere Methoden wie onResponse
, onFailure
ohne Einfügen)Enqueue mehrere GET-Anfrage bei verschachtelten Retrofit 2.0
Mein Code: -
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;
}
}
In obigen Code firstRequest()
korrekt ausgeführt und erweist sich aber die Reaktion secondRequest
(innen firstRequest() Methode ENQUEUE) nicht gut arbeiten. Kein Fehler, Erfolgsmeldung in der Konsole. Kann mir bitte jemand helfen, dieses Problem zu umgehen.
Wenn irgendein Problem in meinem Code, lass es mich wissen. Vielen Dank im Voraus.
Haben laufen Sie den Debugger, um sicherzustellen, dass response.isSuccessful wahr ist? – Ben
@Ben: Ja, es gibt mir erfolgreich Status und geht auch zu meiner secondRequest() Funktion. Aber mein Problem ist, dass es call_second.enqueue (.....) Methode nicht ausführt. –
Entschuldigung, ich bin ehrlich gesagt ratlos, alles sieht gut zu mir aus. Ich habe ähnlichen Code das einzige, was ich anders mache, ist, dass meine Callbacks keine anonymen inneren Klassen sind, also macht das vielleicht einen Unterschied, obwohl es nicht so sein sollte. – Ben