同様の質問が寄せられていることは承知していますが、私はアンドロイドが初めてで、コンテキストがわずかに異なるため、答えが少しわかりにくいと感じています。
スレッドの使用と同様に CountDownLatch を調べましたが、どの方法を使用すればよいかわかりません。どんな助けでも大歓迎です。また、SharedPreferences に commit() の代わりに apply() を使用してみました。
LoginActivity から 2 つの retrofit2 呼び出しを行っています。2 番目の呼び出しで使用するには、最初の呼び出しのトークンが必要です。最初の改造呼び出しの onResponse メソッドで、トークンを sharedpreferences の文字列に保存しています。
2 回目の呼び出しでは、serverToken の値が、アプリの前回の実行で設定されたトークンとして返されます。
最初の呼び出し (getToken) onResponse
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");
}
}
}
ログイン アクティビティ
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();
}
私の 2 回目のレトロフィット コール
public void connectToPush(){
Log.i("sharedpreferencesToken", LoginActivity.preferences.getString("serverToken", "null serverToken"));
}