猿问

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


慕妹3146593
浏览 110回答 1
1回答

慕田峪9158850

尝试这个://SharedPreferences key names:final String NAME = "name";final String AVATAR = "avatar";final String USER_ID = "user_id";你看,传递给的putString()/getString()是变量的内容。变量本身的名称(例如,AVATAR)无关紧要。NAME当您为和传递空字符串(“”)时AVATAR,SharedPreferences您引用的条目称为“”。所以你认为你有两个独立的条目,但实际上你只有一个,具有相同的名称,并且它们互相破坏。您选择作为键名称的值(例如“name”、“avatar”、“user_id”)是任意的,但它们会写入文件SharedPreferences,并且对于在文本编辑器中读取该文件的任何人都可见。因此,选择描述性值会有所帮助。
随时随地看视频慕课网APP

相关分类

Java
我要回答