Ich verwende Retrofit 2 zur Implementierung REST in meiner App. Einer meiner Rückrufe ist asynchron. Ich muss Daten von onResponse()
Methode erhalten, um weiterzugeben, aber diese Methode wird am Ende ausgeführt (nach Rückgabeergebnis, wenn ein Thread andere Dinge getan hat). Es ist Teil meines Code ist, wo Sie meinen async Rückruf finden:Wie bekomme ich das Endergebnis vom asynchronen Callback in Retrofit?
public class JSONManager {
//...
public Result insertUser(final Context context, final String login, final String password, final String salt, final String email) {
IUserApi userAPI = retrofit.create(IUserApi.class);
Call<User> user = userAPI.insertUser(login, password, salt, email);
user.enqueue(new Callback<User>() {
@Override
public void onResponse(Call<User> call, Response<User> response) {
try {
if (response.isSuccessful()) {
int mysqlId = response.body().mysqlId;
int temp = response.code();
if (mysqlId > 0) {
result.setResponseCode(1);
if (sqLiteManager.addUser(login, password, salt, email, mysqlId)) {
result.setResponseCode(4);
result.setResult(true);
} else {
result.setResponseCode(5);
result.setResult(false);
}
} else {
result.setResponseCode(2);
result.setResult(false);
}
} else {
result.setResponseCode(3);
result.setResult(false);
}
} catch (Exception e) {
result.setResult(false);
result.setResponseCode(3);
e.printStackTrace();
}
}
@Override
public void onFailure(Call<User> call, Throwable t) {
result.setResponseCode(2);
result.setResult(false);
}
});
return result;
}
//...
}
Hier versuche ich das Ergebnis erhalten, aber leider bekomme ich nicht erwartetes Ergebnis, weil, wie ich schon schrieb, wird die user.enqueue()
Methode ausgeführt nach Ausführen onClickRegistrationButton()
Methode (also zu spät).
public class RegisterActivity extends AppCompatActivity implements View.OnClickListener {
//...
private void onClickRegistrationButton() {
//...
JSONManager jsonManager = new JSONManager();
Result result = jsonManager.insertUser(getApplicationContext(), login, encryptedPassword, salt, email);
//...
}
}
Haben Sie eine Idee, wie kann ich das beheben?
Was ist "Ergebnis"? Wo deklarieren Sie diese Variable? –
Ich habe es vergessen. Es ist ein Objekt meines eigenen Typs. – joamor