我有一个应用程序,我使用MyApplication.onCreate()方法中的Callback进行简单的改进异步调用来登录,并将我在getAppit回调中作为全局变量返回的userId存储在MyApplication中。
现在在第一个Activity onCreate方法上。我在单独的API调用中使用从登录APi调用中检索到的userId来检索一些用户特定数据。
问题是,当我想调用第二个API调用时,在Activity onCreate方法中。 userId仍为null,因为MyApplication中的第一个调用尚未完成执行且userId尚未设置。
如何确保仅在第一次调用返回userId并正确设置后执行第二次调用。
请建议。
MyApplication类
public class MyApplication extends Application {
private String userId;
@Override
public void onCreate() {
super.onCreate();
// login, password retrieved here.
retrofitClient.login(login, password, new Callback<String>() {
@Override
public void success(String userId, Response response) {
setUserId(userId);
}
@Override
public void failure(RetrofitError error) {
}
});
}
public class MainActivity extends FragmentActivity {
private Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context = this;
// do some logic.
String userId = ((MyApplication) getApplication()).getUserId();
// NOW THE USERID is still NULL since the first call in the MyApplication class is not done yet.
retrofitClient.callSecondAPICall(userId, new Callback<ProductResponse>() {
@Override
public void success(MyResponse myResponse, Response response) {
// do something.
}
@Override
public void failure(RetrofitError error) {
}
});
}
答案 0 :(得分:2)
您可以这样实现:
onUserIdLoaded(String id);
MainActivity
MyApplication
onResume()
((MyApplication) getApplication()).addListener(listener);
中为onPause()
添加一位听众
在((MyApplication) getApplication()).removeListener(listener);
中删除此侦听器:
onUserIdLoaded(id)
onUserIdLoaded(id)
方法。答案 1 :(得分:0)
在第一次调用onSuccess时,只进行第二次调用。这意味着在第一次调用onSuccess之前,你不会开始你的活动。通过此操作,您可以确保第一次调用成功并保存userId。
答案 2 :(得分:0)
你需要在活动中进行两次调用
方式1 :
在活动中进行第一次调用,而不是在应用程序类中。 在第一次通话成功时进行第二次通话。
方式2 : 使用EventBus