私は、Retrofit 2を使ってアプリケーションでRESTを実装しています。私のコールバックの1つは非同期です。 onResponse()
メソッドから渡すデータを取得する必要がありますが、このメソッドは最後に実行されます(戻り値の後、スレッドが他の処理を行ったとき)。あなたは私の非同期コールバックを見つけることができます私のコードの一部ではあります: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;
}
//...
}
私は結果を得る試みるが、残念ながら私は、予想される結果を受信しませんuser.enqueue()
メソッドが後に実行され、私は前に書いたか、ので、 onClickRegistrationButton()
メソッドを実行しています(遅すぎます)。
public class RegisterActivity extends AppCompatActivity implements View.OnClickListener {
//...
private void onClickRegistrationButton() {
//...
JSONManager jsonManager = new JSONManager();
Result result = jsonManager.insertUser(getApplicationContext(), login, encryptedPassword, salt, email);
//...
}
}
これをどのように修正できますか?代わりにあなたのinsertUser
方法で結果オブジェクトを返すようにしようと、あなたはonResponse
とonFailure
両方のパラメータとしてその結果を渡す関数を呼び出す試すことができます
「結果」とは何ですか?あなたはその変数をどこで宣言していますか? –
私はそれを忘れてしまった。それは私のタイプのオブジェクトです。 – joamor