Java SharedReferences中的值项无效

Java SharedReferences中的值项无效,java,android,sharedpreferences,Java,Android,Sharedpreferences,我得到用户值​​从webview通过@JavascriptInterface,这没有问题 接下来,我记录获得的值​​在首选项中,供其进一步使用。 但是,如日志所示,值​​书写不正确 我怎么了 public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener { SharedPreferences sPref;

我得到用户值​​从webview通过@JavascriptInterface,这没有问题

接下来,我记录获得的值​​在首选项中,供其进一步使用。 但是,如日志所示,值​​书写不正确

我怎么了

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, ""));

        }

    }


}
由于某种原因,其含义变化如下

如何获取首选项值
name=myname

请尝试以下操作:

//SharedPreferences key names:
final String NAME = "name";
final String AVATAR = "avatar";
final String USER_ID = "user_id";
你看,传递给
putString()/getString()
的是变量的内容。变量本身的名称(例如,
AVATAR
)无关紧要

当您为
NAME
AVATAR
传递空字符串(“”)时,
SharedReferences
认为您引用的是名为“”的条目。所以你以为你有两个独立的条目,但实际上你只有一个,名字相同,而且它们互相碰撞


您选择作为键名的值(例如,“name”、“avatar”、“user_id”)是任意的,但它们会写入
SharedReferences
文件,并且在文本编辑器中读取该文件的任何人都可以看到。因此,它有助于选择描述性值。

请显示您对
名称
化身
用户ID
的定义。最终字符串名称=”;最终字符串AVATAR=“”;最终字符串用户\u ID=“1”@greeble31您是对的,设置非空值,现在一切正常:)谢谢您的帮助<代码>最终字符串NAME=“guest”
最终字符串AVATAR=“否”
最终字符串用户\u ID=“1”
//SharedPreferences key names:
final String NAME = "name";
final String AVATAR = "avatar";
final String USER_ID = "user_id";