Android SharedPreferences не работает должным образом

Я хотел бы сохранить некоторые пользовательские настройки в SharedPreferences, но почему-то сохраненная строка всегда пуста, когда я ее читаю.

Сохранение..

SharedPreferences prefs = getApplicationContext().getSharedPreferences("AAAAPrefs", Activity.MODE_PRIVATE);
                    SharedPreferences.Editor edits = prefs.edit();
                    edits.putString("request_id", requestId);
                    edits.putInt("active", active);
                    edits.commit();

Чтение..

SharedPreferences prefs = getApplicationContext().getSharedPreferences("AAAAPrefs", Activity.MODE_PRIVATE);
                    String request_id = prefs.getString("request_id", "");

Что я делаю не так? Спасибо за вашу помощь!

РЕДАКТИРОВАТЬ:

new HttpHandler() {
                @Override
                public HttpUriRequest getHttpRequestMethod() {
                    HttpPost httppost = new HttpPost("***********");
                    try {
                        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
                        nameValuePairs.add(new BasicNameValuePair("name", textName.getText().toString()));
                        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                    } catch (UnsupportedEncodingException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    return httppost;
                }
                @Override
                public void onResponse(String result) {
                    try {
                        JSONObject obj = new JSONObject(result);
                        JSONObject response = obj.getJSONObject("response");
                        String requestId = response.getString("request_id");
                        int active = response.getInt("active");

                        SharedPreferences prefs = getApplicationContext().getSharedPreferences("AAAAPrefs", Activity.MODE_PRIVATE);
                        SharedPreferences.Editor edits = prefs.edit();
                        edits.putString("request_id", requestId);
                        edits.putInt("active", active);
                        edits.commit();

                        /* MORE... */

                    } catch (Throwable t) {
                        // Error.
                    }
                }
            }.execute();

person Lukas    schedule 22.09.2014    source источник
comment
Выдает ли он какое-либо исключение или это просто пустая строка?   -  person UeliDeSchwert    schedule 22.09.2014
comment
К сожалению, я не получаю никаких исключений или чего-то еще. Просто пустая строка.   -  person Lukas    schedule 22.09.2014
comment
Вы уверены, что requestId не пуст? Этот код выше кажется, что он должен работать. Не могли бы вы показать немного больше своего кода, где именно вы устанавливаете и получаете префы?   -  person Opiatefuchs    schedule 22.09.2014
comment
Я отлаживал через него, и requestId не пустой, как я его установил. Я устанавливаю его в del. после HTTP-запроса. Обновлю ответ дополнительным кодом. Спасибо за вашу помощь!   -  person Lukas    schedule 22.09.2014
comment
Когда вы пытаетесь прочитать значение?   -  person vilpe89    schedule 22.09.2014
comment
В другом действии, где значение чтения равно @.. Я действительно понятия не имею, почему.   -  person Lukas    schedule 22.09.2014
comment
дикая догадка ... во время синтаксического анализа json возникает исключение, и вы никогда не устанавливаете строку.   -  person Blackbelt    schedule 22.09.2014
comment
Уже проверил это.. он проходит через все, а затем открывает следующее действие.. Я также проверил, не является ли SharedPreferences нулевым.. Есть ли способ проверить, было ли письмо успешным?   -  person Lukas    schedule 22.09.2014
comment
* commit возвращает логическое значение.. проверим это.. РЕДАКТИРОВАТЬ: возвращает true.. ммм.. Я действительно ненавижу такие проблемы ^^   -  person Lukas    schedule 22.09.2014


Ответы (2)


Кажется, это работает, когда я создаю экземпляр SharedPreferences со следующим кодом:

PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
person Lukas    schedule 22.09.2014

Попробуй это:

public static void saveOrEdit(Context context ,String name,
            String key , String value,Class clz){
        if(null == context || StringUtil.isEmpty(name)){
            return;
        }
        SharedPreferences preferences = context.getSharedPreferences(name, Context.MODE_PRIVATE);
        Editor editor = preferences.edit();
        if(null != clz){
            if(clz.getSimpleName().equals("Boolean")){
                editor.putBoolean(key, Boolean.valueOf(value));
            }else if(clz.getSimpleName().equals("Float")){
                editor.putFloat(key, Float.valueOf(value));
            }else if(clz.getSimpleName().equals("Integer")){
                editor.putInt(key, Integer.valueOf(value));
            }else if(clz.getSimpleName().equals("Long")){
                editor.putLong(key, Long.valueOf(value));
            }else{
                editor.putString(key, value);
            }
        }else{          
            editor.putString(key, value);
        }
        //It should be submitted
        editor.commit();
    }
person Carlos    schedule 22.09.2014