android - 从 android 非活动类中的 Sharedpreferences 获取以前的值
问题描述
我想从 android 非活动类中的共享首选项中读取数据。
当我尝试从非活动类中的共享首选项中读取数据时,它将返回以前的值。
我的活动类:
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();
}
}
当活动类的数据更新时,谁能指导我如何立即读取数据。
提前致谢。
解决方案
您的 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);
接口类:
public void start(String data, String uname, String pwd){
// call api...
}
推荐阅读
- php - Laravel:模型ID在更新前变为真
- ruby-on-rails - 在 Rails 5.2 系统测试中如何填写或绕过 HTTP Basic Auth?
- c# - 在启用 useLightweightEdges 创建边缘时,OrientDB 挂起
- hybris - 如何为特定的灵活搜索查询创建新的缓存区域?
- vba - vba word 宏将字符串放入现有标题
- c# - Windows api 的 ReadFile 没有读取从 USB 设备发送的所有数据
- c - 声明/初始化结构时,每个花括号代表什么?(警告:初始化器 [-Wmissing-braces] 周围缺少大括号)
- c# - 如何删除类别和子类别?
- javascript - 是否可以从 JavaScript 更新 python 中的变量?
- angular - 使用数据布尔值展开/折叠材质树(Angular 7)