java - Sharedpreferences 中的值输入无效

标签 java android sharedpreferences

我通过@JavascriptInterface从webview获取用户值,这个没有问题。

接下来我将获得的值记录在首选项中,以供进一步使用。 然而,正如日志所示,值写入不正确。

我哪里错了?

public class MainActivity extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener {

    SharedPreferences sPref;
    public static final String PREFS_FILE = "MyPrefsFile";

    ................

    public class WebAppInterface {
        Context mContext;

        WebAppInterface(Context c) {
            mContext = c;
        }

        @JavascriptInterface
        public void showUser(String data) {
            Log.d("MyTAG", "INPUT: "+data);
            ArrayList<String> stringArray = new ArrayList<String>();
            JSONArray jsonArray;
            try {
                jsonArray = new JSONArray(data);
                for (int i = 0; i < jsonArray.length(); i++) {
                    stringArray.add(jsonArray.getString(i));
                    Log.d("MyTAG", "i="+i+" :"+jsonArray.getString(i));
                }
                Log.d("MyTAG", "Array: "+stringArray);
            } catch (JSONException e) {
                e.printStackTrace();
            }

            sPref = getSharedPreferences(PREFS_FILE, 0);

            SharedPreferences.Editor ed = sPref.edit();
            ed.putString(NAME,stringArray.get(0));
            ed.putString(AVATAR,stringArray.get(1));
            ed.putString(USER_ID, stringArray.get(2));

            ed.commit();


            Log.d("MyTAG", "name="+sPref.getString(NAME, ""));
            Log.d("MyTAG", "avatar="+sPref.getString(AVATAR, ""));
            Log.d("MyTAG", "user_id="+sPref.getString(USER_ID, ""));

        }

    }


}

日志:

D/MyTAG: INPUT: ["myname","src","2"]

D/MyTAG: i=0 :myname
D/MyTAG: i=1 :src
D/MyTAG: i=2 :2

D/MyTAG: Array: [myname, src, 2]

D/MyTAG: name=src
D/MyTAG: avatar=src
D/MyTAG: user_id=2

由于某种原因,含义更改为以下内容。

如何获取首选项值name = myname

最佳答案

试试这个:

//SharedPreferences key names:
final String NAME = "name";
final String AVATAR = "avatar";
final String USER_ID = "user_id";

你看,传递给 putString()/getString() 的是变量的内容。变量本身的名称(例如,AVATAR)无关紧要。

当您为 NAMEAVATAR 传递空字符串 ("") 时,SharedPreferences 认为您正在引用名为“的条目” ”。所以你认为你有两个独立的条目,但实际上你只有一个,具有相同的名称,并且它们互相破坏。

您选择作为键名称的值(例如“name”、“avatar”、“user_id”)是任意的,但它们会写入 SharedPreferences 文件,并且对其他人可见任何人在文本编辑器中阅读该文件。因此,选择描述性值会有所帮助。

关于java - Sharedpreferences 中的值输入无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58531363/

相关文章:

flutter - 如何在 Flutter 中使用 SharedPreferences 保存 DateFormat?

java - 在共享首选项上打开第二个 Activity/错误时出错

Java 小服务程序 : Cookies do not get deleted

java - 改变方向时加载图片

java - java启动时创建一个文件

Android- noHistory = true 从最近回来时不工作

java - "ViewGroup"父控件,如果空间不足,则自动将控件移动到下一行

java - 将自定义数组列表存储在 SharedPreferences 中并从那里获取它?

java - vlcj mlr 特殊字符

java - 以编程方式放宽 SSL 算法约束