私は同様の質問が出されていることを認識していますが、私はアンドロイドに慣れていて、ちょっと違う文脈になっているので少し混乱しています。retrofit2が非同期を続行するまで待つ最善の方法
私はCountDownLatchだけでなく、スレッドを使用して見て、どのメソッドを使用するか分からない。どんな助けでも大歓迎です。私はSharedPreferencesのためにcommit()の代わりにapply()を使ってみました。
LoginActivityから2回retrofit2コールを行っています。 2番目の呼び出しで使用する最初の呼び出しからトークンが必要です。最初のレトロフィットコールのonResponseメソッドでsharedpreferencesの文字列にトークンを保存しています。私の2番目の呼び出しで
serverTokenの値はアプリ
第一の呼び出し(入手トークン)の前回の実行に設定されたトークンとして戻って来ているが
call.enqueue(new retrofit2.Callback<TokenResponse>() {
@Override
public void onResponse(Call<TokenResponse> call, retrofit2.Response<TokenResponse> response) {
if (response.isSuccessful()) {
TokenResponse tokenResponse = response.body();
LoginActivity.editor.putString("serverToken", tokenResponse.getAccessToken());
LoginActivity.editor.commit();
} else {
Log.i("Server Token", "failed");
}
}
}
LoginActivityをonResponse
public class LoginActivity extends AppCompatActivity {
public static SharedPreferences preferences;
public static SharedPreferences.Editor editor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
authenticationController = new AuthenticationController();
preferences = PreferenceManager.getDefaultSharedPreferences(this);
editor = preferences.edit();
}
public void onLoginClicked(View view) {
getToken(); //FIRST RETROFIT CALL
connectToPush(); //SECOND CALL WHERE I NEED TOKEN FROM FIRST CALL
}
public void getToken() {
authenticationController.login(grantType, username, password);
}
public void connectToPush() {
authenticationController.connectToPush();
}
私の第二のレトロフィットコール
public void connectToPush(){
Log.i("sharedpreferencesToken", LoginActivity.preferences.getString("serverToken", "null serverToken"));
}
私はRetrofitに精通していませんが、AsyncTaskを使用している場合はAsyncTask.get()を使用して結果を待つことができます。 https://developer.android.com/reference/android/os/AsyncTask.html#get() –
提案いただきありがとうございます。私はretrofit2を使用して非同期に呼び出しを行うcall.enque()(私のコードを編集)を使用しています。私は、私があなたがレトロフィットで提案したものを実装できるかどうか分からない。 – HappyPoofySquirrel