Ich bin derzeit ein JsonObject über AsyncHttpClient (loopj) Web-Anfrage anfordern, aber die Anfrage ist eher langsam und ich brauche das Objekt, um fortzufahren. Derzeit stürzt das Programm ab, da das zu speichernde Objekt leer ist und die Speicherfunktion aufgerufen wird, bevor die Webanforderung abgeschlossen ist.(Android | Java) AndroidAsyncHttp (Loopj), um Web-Anfrage abzuschließen, bevor Thread
Hier ist ein Ausschnitt aus meinem Code von dem, was ich versuche zu tun:
btnCreate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AsyncHttpClient client = new AsyncHttpClient();
String apiAddress = MYAPIADDRESS;
client.get(apiAddress,
new JsonHttpResponseHandler() {
//@Override
public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
try {
JSONObject tempTransition = response.getJSONArray("items").getJSONObject(0).getJSONObject("snippet");
Toast.makeText(getApplicationContext(), tempTransition.get("description").toString(), Toast.LENGTH_SHORT).show();
if(!dirDirectoryJson.contains(tempTransition)){
dirDirectoryJson.add(tempTransition);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onSuccess(int statusCode, Header[] headers, JSONArray timeline) {
}
@Override
public void onFinish() {
// Completed the request (either success or failure)
}
});
//*** Crashes here ****
//dirDirectoryJson returning null object from above due to call before complete web request and crashes the program
try {
getDescription = dirDirectoryJson.get(0).getString("description").toString().trim();
setDescription(getDescription);
} catch (JSONException e) {
e.printStackTrace();
}
}
ich SyncHttpClient habe versucht, Gewinde Schlaf etc. sowie gesehen/versucht, diese (und noch viele andere) machen Links,
How to wait for async http to end before continuing?
https://forum.qt.io/topic/5389/how-to-ensure-fully-asynchronous-web-requests
How to wait for all requests to finish
How to make the Main thread wait, when i dont know when will Async task finish the job.?
Ich habe auch versucht, das empfangene Objekt zu rösten, während der Speicherabschnitt des Codes kommentiert wurde. (kommentiert oben) Der Code stürzte nicht ab, aber der Toast erscheint nur nach einer Weile, wenn die Web-Anfrage abgeschlossen ist.
Wie gehe ich vor, um dieses Problem zu lösen? (d. h. erfolgreich das Objekt speichern, ohne die App zu zerstören nur, nachdem die Web-Anfrage abgeschlossen ist). Ich habe sehr lange im Web gesucht, aber keine funktionierende Methode gefunden und ich bin ein Anfänger in Android.
Bitte helfen Sie und lassen Sie mich wissen, wenn weitere Details erforderlich sind. Danke im Voraus!
Welches ist die Speicherfunktion? – Shubhank
@Shubhank Hallo! Ich habe in dem obigen Code tatsächlich kommentiert, im letzten Versuch zu fangen. es stürzt bei der Speicherung ab, bevor das Speichern überhaupt erreicht wird: '(Ich habe die Bearbeitung gemacht, sry für den Tippfehler. – Candiie
bitte verschiebe diesen Code in den On-Erfolg auch – Shubhank