我无法从SharedPreferences
获取数据。点击某个按钮后,它会在名为AsyncTask
的其他类中执行Background
。
public class Background extends AsyncTask<Integer,Void,String>{
private Context context;
private AsyncResponse listener;
public Background(Context context,AsyncResponse listener) {
this.context = context;
this.listener=listener;
}
AsyncResponse
是我创建的一个界面,用于通知我的MainMactivity
后台工作已完成。它只是:
package com.example.pablo.zad3;
public interface AsyncResponse {
void TaskCompleted();
}
然后我想将结果传递给SharedPreferences
:
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
SharedPreferences prefs = this.context.getSharedPreferences("MyPrefs",Context.MODE_PRIVATE);
prefs.edit().putString("A", s);
prefs.edit().commit();
listener.TaskCompleted();
}
但是在我的MainActivity
我无法得到结果字符串,就像A
中没有SharedPreferences
键一样(我总是得到"NO DATA"
):
@Override
public void TaskCompleted() {
SharedPreferences prefs = this.getSharedPreferences("MyPrefs", Context.MODE_PRIVATE);
if(prefs != null) {
String text = prefs.getString("A", "NO DATA");
editText2.setText(text);
}
}
我不知道我做错了什么,你能帮助我吗?
答案 0 :(得分:1)
问题是这两行:
prefs.edit().putString("A", s);
prefs.edit().commit();
在第一个您打开SharedPreferences进行编辑并进行更改...
现在在第二行,你再次打开它......导致之前的更改回滚...
作为&#34;家庭&#34; putXXX(...)
类的SharedPreferences.Editor
方法返回编辑器本身,您应该执行以下操作:
prefs.edit().putString("A", s).putXXX(...).putXXX(...).commit();
(putXXX(...)
我的意思是设置其他偏好fx putInt("Z", 666)
)
现在更改将被保存
答案 1 :(得分:0)
使用此功能写入首选项:
//Write to preferences
String s = "this is a test.";
SharedPreferences prefs = this.getSharedPreferences("MyPrefs",this.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putString("A", s);
editor.apply();
这用于检索信息
//Fetch from preferences
SharedPreferences prefs2 = this.getSharedPreferences("MyPrefs", this.MODE_PRIVATE);
if(prefs2 != null) {
String text2 = prefs.getString("A","");
Log.d(LOG_TAG, "This is the string: "+text2);
}
你唯一遗漏的是编辑。