从android非活动类的Sharedpreferences获取以前的值

问题描述 投票:0回答:2

我想从android非活动类的共享首选项中读取数据。

当我尝试从非活动类的共享首选项中读取数据时,它将返回以前的值。

MyActivity类:

public class MainActivity extends AppCompatActivity {
 SharedPreferences preferences;
 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final APIClient client = new APIClient(this);
        preferences = getSharedPreferences("loginData",Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = preferences.edit();
        editor.putString("ip",ipAddress);
        editor.putString("username",uname);
        editor.putString("pwd",pwd);
        editor.apply();
        client.start();
     }
}

我的非活动班:

公共类APIClient {

 public Context mcontext;
 public APIClient(Context context) {
        mcontext = context;
    }
    public void start(){
        SharedPreferences sharedPreferences = 
        mcontext.getSharedPreferences("loginData",Context.MODE_PRIVATE);
        String data = sharedPreferences.getString("ip","");
        uname = sharedPreferences.getString("username","");
        pwd = sharedPreferences.getString("pwd","");
        Log.d("*****","userName ="+uname+"\n"+pwd);
        Toast.makeText(mcontext,"user name ="+uname+"\n"+"pwd="+pwd,Toast.LENGTH_LONG).show();
    }
}

有人从活动类更新数据时,谁能指导我如何立即读取数据。

提前感谢。

android sharedpreferences
2个回答
1
投票

您的APIClent不应了解SharedPreferences,而应在调用站点上为其提供所需的值:

final String data = sharedPreferences.getString("ip","");
final String uname = sharedPreferences.getString("username","");
final String pwd = sharedPreferences.getString("pwd","");

client.start(data, uname, pwd);

Api类别:

public void start(String data, String uname, String pwd){
    // call api...
}

0
投票

尝试用editor.commit()代替editor.apply()

因为在您尝试访问该值时,可能仍未保存更改。

有关commit vs apply的更多信息,请参考this。>

更好的解决方案是不要在需要时发送上下文并更新值。使用this

© www.soinside.com 2019 - 2024. All rights reserved.