首页 > 解决方案 > 从 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();
    }
}

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

提前致谢。

标签: androidsharedpreferences

解决方案


您的 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...
}

推荐阅读