我意识到有人问过类似的问题,但我是 android 新手,发现答案有点令人困惑,因为它们的上下文略有不同。
我查看了 CountDownLatch 以及使用 Threads,但不确定使用哪种方法。任何帮助将非常感激。对于 SharedPreferences,我也尝试过使用 apply() 而不是 commit()。
我正在从 LoginActivity 进行 2 个 retrofit2 调用。我需要第一次通话中的令牌在第二次通话中使用。我在第一次改造调用的 onResponse 方法中将令牌保存到 sharedpreferences 中的字符串中。
在我的第二次调用中,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();
}
我的第二次改造电话
public void connectToPush(){
Log.i("sharedpreferencesToken", LoginActivity.preferences.getString("serverToken", "null serverToken"));
}