Java 共享首选项值未立即更新

Java 共享首选项值未立即更新,java,android,api,sharedpreferences,Java,Android,Api,Sharedpreferences,当用户登录时,我从api获取了一些数据,我想立即更新一些视图值。但使用共享首选项在第一次不起作用,用户应该关闭应用程序,在这种情况下,共享首选项值已更新。在不关闭应用程序的情况下,如何在其他活动中更新从api检索到的值? 这是我的密码 public class AppController extends Application { public static SharedPreferences userSharedPreferences; public static SharedPref

当用户登录时,我从api获取了一些数据,我想立即更新一些视图值。但使用共享首选项在第一次不起作用,用户应该关闭应用程序,在这种情况下,共享首选项值已更新。在不关闭应用程序的情况下,如何在其他活动中更新从api检索到的值? 这是我的密码

public class AppController extends Application {
  public static SharedPreferences userSharedPreferences;
  public static SharedPreferences.Editor userEditor;

  public void onCreate() {
        super.onCreate();
        userSharedPreferences = getSharedPreferences("user", MODE_PRIVATE);
        //userSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
        userEditor = userSharedPreferences.edit();
  }
}

public class ParseLogin {
        JSONObject json = new JSONObject(jsonObject.toString());
        JSONObject resultObject = json.getJSONObject("Result");
        JSONObject baseObject = resultObject.getJSONObject("Base");
        //SharedPreferences.Editor userEditor = context.getSharedPreferences("user", Context.MODE_PRIVATE).edit();
        SharedPreferences.Editor userEditor = AppController.userEditor;

        userEditor.putString("UserName", baseObject.getString("UserName"));
        userEditor.putString("MobileNumber", baseObject.getString("Mobile"));
        userEditor.putString("FirstName", baseObject.getString("FirstName"));
        userEditor.putString("LastName", baseObject.getString("LastName"));
        userEditor.putString("Avatar", baseObject.getString("Avatar"));
        userEditor.putString("Email", baseObject.getString("Email"));
        userEditor.putString("Gender", baseObject.getString("Gender"));
        userEditor.putString("Datebirth", baseObject.getString("Datebirth"));
        userEditor.apply();
        SharedPreferences.Editor editor = context.getSharedPreferences("const", Context.MODE_PRIVATE).edit();
        editor.putString("PaymentUrl", resultObject.getString("PaymentUrl"));
        editor.putString("FararuUrl", resultObject.getString("FararuUrl"));
        editor.putString("ForgetPasswordUrl", resultObject.getString("ForgetPasswordUrl"));
        editor.apply();
        Log.i("test_sp", AppController.userSharedPreferences.getString("FirstName", ""));
}

public class LoginFragment extends Fragment implements View.OnClickListener {
   @Override
    public void onClick(View v) {
       mLoginViewModel.login(v, et_username.getText().toString(),
                            et_pass.getText().toString(), getContext()).observe(this,
                            new Observer<Boolean>() {
                        @Override
                        public void onChanged(@Nullable Boolean isLogin) {
                            if (isLogin) {
                                mLoginViewModel.getBaseData().observe(LoginFragment.this,
                                        new Observer<Boolean>() {
                                    @Override
                                    public void onChanged(@Nullable Boolean aBoolean) {
                                        dialog.dismiss();
                                        Intent intent = new Intent(mContext, MainActivity.class);
                                        intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
                                        getActivity().finish();
                                        startActivity(intent);
                                        Toast.makeText(mContext, R.string.logsuccess, Toast.LENGTH_SHORT).show();
                      }
                    });
                 } else {
                   dialog.dismiss();
                 }
           }
        });
    }
}

public class LoginViewModel extends AndroidViewModel {
  public LiveData<Boolean> getBaseData() {
        LoginRepository loginRepository = new LoginRepository();
        return loginRepository.getBaseData(getApplication());
  }
}

public class LoginRepository {
   public LiveData<Boolean> getBaseData(final Context context) {
        BaseService loginService = new BaseService();
        final MutableLiveData<Boolean> loginStatusLiveData = new MutableLiveData<>();
        String token = context.getSharedPreferences("user", Context.MODE_PRIVATE).getString("Api-Token", "");
        Log.i("token_val", token);
        Call<JsonObject> call = loginService.getRetrofit().create(UserLoginApi.class).getBaseData(token);
        call.enqueue(new Callback<JsonObject>() {
            @Override
            public void onResponse(Call<JsonObject> call, Response<JsonObject> response) {

                try {
                    assert response.body() != null;
                    ParseLogin parseLogin = new ParseLogin();
                    int code = parseLogin.getCode(response.body());
                    if (code == 200) {
                        parseLogin.getBaseData(context, new JSONObject(response.body().toString()));
                        logUser(context);
                        loginStatusLiveData.postValue(true);
                        FireBaseRepository fireBaseRepository = new FireBaseRepository();
                        fireBaseRepository.sendFireBaseToken(context);
                        Log.e(this.getClass().getName(), "user is login");
                    } else if (code == 401 || code == 403) {
                        loginStatusLiveData.postValue(false);
                        Log.e(this.getClass().getName(), "401,403");
                    } else {
                        loginStatusLiveData.postValue(true);
                        Log.e(this.getClass().getName(), "other");
                    }

                } catch (JSONException | NullPointerException e) {
                    e.printStackTrace();
                    Log.e(this.getClass().getName(), "json error");
                    Log.e(this.getClass().getName(), e.getMessage() + "");
                    loginStatusLiveData.postValue(true);
                }
            }

            @Override
            public void onFailure(Call<JsonObject> call, Throwable t) {
                Log.e(this.getClass().getName(), t.getMessage() + "");
                Log.e(this.getClass().getName(), "failure error");
                loginStatusLiveData.postValue(true);
            }
        });
        return loginStatusLiveData;
    }
}

public class MainActivity extends AppCompatActivity {
   @Override
    protected void onResume() {
        super.onResume();

        //SharedPreferences pref = getSharedPreferences("user", MODE_PRIVATE);
        SharedPreferences pref = AppController.userSharedPreferences;
        String fname = pref.getString("FirstName", "");
        String lname = pref.getString("LastName", "");
        tv_username.setText(fname + " " + lname);
    }
}
公共类AppController扩展应用程序{
公共静态SharedReferences用户SharedReferences;
公共静态SharedReferences.Editor用户编辑器;
public void onCreate(){
super.onCreate();
UserSharedReferences=GetSharedReferences(“用户”,模式\私有);
//UserSharedReferences=PreferenceManager.GetDefaultSharedReferences(此);
userEditor=userSharedReferences.edit();
}
}
公共类解析登录{
JSONObject json=新的JSONObject(JSONObject.toString());
JSONObject resultObject=json.getJSONObject(“结果”);
JSONObject baseObject=resultObject.getJSONObject(“Base”);
//SharedReferences.Editor userEditor=context.getSharedReferences(“user”,context.MODE_PRIVATE).edit();
SharedReferences.Editor userEditor=AppController.userEditor;
userEditor.putString(“用户名”,baseObject.getString(“用户名”);
putString(“MobileNumber”,baseObject.getString(“Mobile”);
userEditor.putString(“FirstName”,baseObject.getString(“FirstName”);
userEditor.putString(“LastName”,baseObject.getString(“LastName”);
userEditor.putString(“阿凡达”,baseObject.getString(“阿凡达”);
userEditor.putString(“Email”,baseObject.getString(“Email”);
userEditor.putString(“性别”,baseObject.getString(“性别”);
userEditor.putString(“Datebirth”,baseObject.getString(“Datebirth”);
userEditor.apply();
SharedReferences.Editor编辑器=context.getSharedReferences(“const”,context.MODE_PRIVATE).edit();
putString(“PaymentUrl”,resultObject.getString(“PaymentUrl”);
putString(“FararuUrl”,resultObject.getString(“FararuUrl”);
putString(“ForgetPasswordUrl”,resultObject.getString(“ForgetPasswordUrl”);
editor.apply();
Log.i(“test_sp”,AppController.usersharedreferences.getString(“FirstName”),AppController.usersharedreferences.getString;
}
公共类LoginFragment扩展片段实现View.OnClickListener{
@凌驾
公共void onClick(视图v){
mLoginViewModel.login(v,et_username.getText().toString(),
et_pass.getText().toString(),getContext())。观察(这个,
新观察员(){
@凌驾
公共void onChanged(@Nullable Boolean isLogin){
if(isLogin){
mLoginViewModel.getBaseData().observe(LoginFragment.this,
新观察员(){
@凌驾
更改后的公共void(@Nullable Boolean aBoolean){
dialog.dismise();
意向意向=新意向(mContext,MainActivity.class);
intent.addFlags(intent.FLAG\u活动\u无\u动画);
getActivity().finish();
星触觉(意向);
Toast.makeText(mContext,R.string.logsuccess,Toast.LENGTH_SHORT.show();
}
});
}否则{
dialog.dismise();
}
}
});
}
}
公共类LoginViewModel扩展了AndroidViewModel{
公共LiveData getBaseData(){
LoginRepository LoginRepository=新的LoginRepository();
返回loginRepository.getBaseData(getApplication());
}
}
公共类登录还原{
公共LiveData getBaseData(最终上下文){
BaseService loginService=新的BaseService();
最终的MutableLiveData loginStatusLiveData=新的MutableLiveData();
String-token=context.getSharedReferences(“用户”,context.MODE_-PRIVATE).getString(“Api-token”,”);
Log.i(“令牌”,令牌);
Call Call=loginService.getReformation().create(UserLoginApi.class).getBaseData(令牌);
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
试一试{
assert response.body()!=null;
ParseLogin ParseLogin=新建ParseLogin();
int code=parseLogin.getCode(response.body());
如果(代码==200){
getBaseData(上下文,新的JSONObject(response.body().toString());
日志用户(上下文);
loginStatusLiveData.postValue(true);
FireBaseRepository FireBaseRepository=新FireBaseRepository();
fireBaseRepository.sendFireBaseToken(上下文);
Log.e(this.getClass().getName(),“用户是登录名”);
}else if(代码==401 | |代码==403){
loginStatusLiveData.postValue(false);
Log.e(this.getClass().getName(),“401403”);
}否则{
loginStatusLiveData.postValue(true);
Log.e(this.getClass().getName(),“其他”);
}
}捕获(JSONException | NullPointerException e){
e、 printStackTrace();
Log.e(this.getClass().getName(),“json错误”);
Log.e(this.getClass().getName(),e.getMessage()+);
loginStatusLiveData.postValue(true);
}
}
@凌驾
公共空间