Недопустимая запись значения в Sharedpreferences - PullRequest
0 голосов
/ 24 октября 2019

Я получаю пользовательские значения из веб-просмотра через @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, ""));

        }

    }


}

Журналы:

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

1 Ответ

0 голосов
/ 24 октября 2019

Попробуйте:

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

Видите, то, что передается в putString()/getString(), это содержимое переменной. Имя самой переменной (например, AVATAR) несущественно.

Когда вы пропустили пустую строку ("") для NAME и AVATAR, SharedPreferences подумал, что вы ссылаетесьзапись называется "". Итак, вы подумали, что у вас есть две отдельные записи, но на самом деле у вас была только одна, с одним и тем же именем, и они забивали друг друга.

Значения, которые вы выбираете в качестве имен ключей (например, «имя», «avatar "," user_id ") являются произвольными, но они записываются в файл SharedPreferences и будут видны всем, кто читает этот файл в текстовом редакторе. По этой причине он помогает выбирать описательные значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...