getSharedPreferences问题

时间:2015-10-23 13:03:37

标签: android sharedpreferences

我无法从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);
        }
    }

我不知道我做错了什么,你能帮助我吗?

2 个答案:

答案 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);
        }

你唯一遗漏的是编辑。