我通過@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 :mynameD/MyTAG: i=1 :srcD/MyTAG: i=2 :2D/MyTAG: Array: [myname, src, 2]D/MyTAG: name=srcD/MyTAG: avatar=srcD/MyTAG: user_id=2由于某種原因,含義更改為以下內容。如何獲取偏好值name = myname
1 回答

慕田峪9158850
TA貢獻1794條經驗 獲得超7個贊
嘗試這個:
//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,并且對于在文本編輯器中讀取該文件的任何人都可見。因此,選擇描述性值會有所幫助。
添加回答
舉報
0/150
提交
取消