- Forum-Beiträge: 2
10.02.2017, 08:23:02 via Website
10.02.2017 08:23:02 via Website
Hallo,
der Thread-Titel beschreibt das Problem eigentlich bereits. Mein Retrofit2 2.1.0 Callback in Verbindung mit okhttp 3.6.0 und libgdx läuft definitiv nicht im richtigen Thread, obwohl dies der Fall sein sollte, dafür ist der Callback ja gedacht. Synchronous läuft das Ganze wunderbar, was aber nicht das Ziel sein kann.
In Verbindung mit libgdx und den OpenGL Funktionen führt dies zwangsläufig zu einem Problem, die App wird instabil oder stürzt ab. Das Problem zu umgehen und den Code auszulagern möchte ich verhindern. Mich würde interessieren was das Thread-Problem verursacht.
call.enqueue(new Callback<JsonRegisterResult>() {
@Override
public void onResponse(Call<JsonRegisterResult> call, Response<JsonRegisterResult> response) {
if (!response.isSuccessful()) {
Gdx.app.log("Network", "Response failure");
return;
}
JsonRegisterResult result = response.body();
if (result.error == 0) {
Gdx.app.log("Network", "Success! Going in-game...");
} else {
Gdx.app.log("Network", "Failed! Server code: " + result.error);
}
}
@Override
public void onFailure(Call<JsonRegisterResult> call, Throwable t) {
Gdx.app.log("Network", "Failed! Exception thrown");
}
});
}
}
Der Code selbst befindet sich in einem libgdx Button OnClickListener.
mGame.setScreen(new GameScreen(mGame));
innerhalb von onResponse würde mit
E/libEGL: call to OpenGL ES API with no current context (logged once per thread)
sofort zum Absturz führen. Das betrifft aber auch andere Funktionen, einen Dialog einzublenden (z.B. um den Status anzuzeigen) führt zu einem Random-Crash. Das ganze deutet wie ich bereits herausfinden konnte auf ein Thread-Problem hin, aber warum?
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.