Общие предпочтения? (Чрезвычайно простая проблема!?)

Я просто пытаюсь сохранить вход пользователя из editText в Shared Preference, но он не работает:

editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int keycode, KeyEvent event) {

        Log.v(TAG, keyword.getString("keyword", "mDefault")); //IT LOGS OUT THE DEFAULT STRING EVEN **AFTER** STORING THE PREFERENCES BEFORE

        if (keycode == EditorInfo.IME_ACTION_SEND) {
            editText.setText(editText.getText().toString());

            keywordEditor.putString("keyword", editText.getText().toString());
            keywordEditor.commit();

            Log.v(TAG, keyword.getString("keyword", "default")); //CORRECT! THIS LINE WORKS
            }
        }
    return true;
});

Когда я сначала отредактирую текст, я сначала получу журнал "mDefault", который является нормальным, поскольку ничего не сохраняется в общих предпочтениях.

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

Вот проблема: После того, как я сохранил что-то в общих предпочтениях, я перехожу к другому действию, и я возвращаюсь, и все данные, хранящиеся в общих предпочтениях, GONE!

Самый первый журнал по-прежнему говорит mDefault после навигации по действиям.

В чем проблема?

EDIT:

Вот мой экземпляр:

onCreate:

 keyword = PreferenceManager.getDefaultSharedPreferences(this); //Making a shared preferences
        keywordEditor = keyword.edit();

Ответ 1

Возможно, вы не сэкономите на setOnEditorActionListener. Сохраните, когда вы перейдете к другому действию. Потому что, когда он переходит к различной активности, setOnEditorActionListener editText.getText(). ToString() возвращает null.

Ответ 2

Очень важно: вам нужно имя предпочтения (например: "MY_PREFS_NAME" ), чтобы установить и получить значения:

SharedPreferences.Editor keywordEditor = context.getSharedPreferences("MY_PREFS_NAME", MODE_PRIVATE).edit();

Используйте одно и то же постоянное имя предпочтения, и оно предоставит вам те же настройки в любой точке вашего приложения.

Ответ 3

ХРАНЕНИЕ ПРЕДПОЧТЕНИЙ:

   SharedPreferences pref = getSharedPreferences("MyPrefs",Context.MODE_PRIVATE);

    // We need an editor object to make changes
    SharedPreferences.Editor edit = pref.edit();

   // Set/Store data
   edit.putString("username", "Rishabh");
   edit.putString("password", "rishabh123");

   // Commit the changes
   edit.commit();

ПОСЛЕДОВАТЕЛЬНЫЕ ПРЕДПОЧТЕНИЯ:

  SharedPreferences pref = getSharedPreferences("MyPrefs", Context.MODE_PRIVATE);

   String username = pref.getString("username", "");
   String password= pref.getString("password", "");

   Log.d(TAG, username);
   Log.d(TAG, password);

Ответ 4

Добавьте это в качестве примера, если вы пропустили ключевые компоненты. В настоящее время это работает для меня:

public class Main2Activity extends ActionBarActivity {

    private SharedPreferences keyword;
    private SharedPreferences.Editor keywordEditor;
    private String TAG = "TAG";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);


        keyword = PreferenceManager.getDefaultSharedPreferences(this); //Making a shared preferences
        keywordEditor = keyword.edit();

        final EditText editText = (EditText) findViewById(R.id.et_text);


        findViewById(R.id.btn_launch).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(Main2Activity.this, Main22Activity.class);
                startActivity(intent);
            }
        });

        editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView v, int keycode, KeyEvent event) {
                Log.v(TAG, "Initial: " + keyword.getString("keyword", "mDefault")); //IT LOGS OUT THE DEFAULT STRING EVEN **AFTER** STORING THE PREFERENCES BEFORE

                if (keycode == EditorInfo.IME_ACTION_SEND) {
                    editText.setText(editText.getText().toString());

                    keywordEditor.putString("keyword", editText.getText().toString());
                    keywordEditor.commit();

                    Log.v(TAG, "Saving in prefs: " + keyword.getString("keyword", "default")); //CORRECT! THIS LINE WORKS
                }
                return true;
            }
        });
    }

}

Из новой установки:

Я набрал "тест" и нажал кнопку отправки на клавиатуре, поэтому вызвал onEditorAction

Затем нажмите кнопку "Запустить новую активность → нажмите кнопку" назад "и введите" test2 "и нажмите кнопку отправки.

Ниже выведено сообщение:

02-29 23:26:42.068 18105-18105/com.example.naveed.myapplication V/TAG: Initial: mDefault
02-29 23:26:42.136 18105-18105/com.example.naveed.myapplication V/TAG: Saving in prefs: test

02-29 23:26:53.281 18105-18105/com.example.naveed.myapplication V/TAG: Initial: test
02-29 23:26:53.338 18105-18105/com.example.naveed.myapplication V/TAG: Saving in prefs: test2

Как вы можете видеть изначально, это было "mDefault", после чего "test" был сохранен. Я начал новую деятельность и вернулся. В следующий раз исходный был "test", так как он был сохранен в прошлый раз, а "test2" - новое сохраненное значение.

Ответ 5

Создать SharedPreferences класс

  public class SharedPreferenceClass
{
    // Shared Preferences
    SharedPreferences pref;
    // Editor for Shared preferences
    SharedPreferences.Editor editor;
    // Context
    Context _context;
    // Shared pref mode
    int PRIVATE_MODE = 0;
    // Sharedpref file name
    private static final String PREF_NAME = "INTELLIJ_AMIYO";

    public static final String KEY_SET_VALUE= "KEY_SET_VALUE";

    public SharedPreferenceClass(Context context){
        this._context = context;
        pref = _context.getSharedPreferences(PREF_NAME, 0);
        editor = pref.edit();
    }


    public void setUserDATA(String data)
    {
        editor.remove(KEY_SET_VALUE);
        editor.putString(KEY_SET_VALUE, data);
        editor.commit();
    }

    public String getUserDATA()
    {
        String  getData= pref.getString(KEY_SET_VALUE, null);
        return getData;
    }

 }   

Теперь вызовите это в разделе "Деятельность" по всему миру

SharedPreferenceClass        sharedPrefClassObj;

& вызов onCreate (Bundle savedInstanceState)

   sharedPrefClassObj = new SharedPreferenceClass(getApplicationContext());

Теперь добавьте этот

 editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int keycode, KeyEvent event) {


        if (keycode == EditorInfo.IME_ACTION_SEND) {
            editText.setText(editText.getText().toString());
            sharedPrefClassObj.setUserDATA(editText.getText().toString()); // Set data 
            // Get data sharedPrefClassObj.getUserDATA();

            }
        }
    return true;
});

Ответ 6

ХРАНЕНИЕ ПРЕДПОЧТЕНИЙ:

SharedPreferences pref = getSharedPreferences("MyPrefs",Context.MODE_PRIVATE);


SharedPreferences.Editor edit = pref.edit();


edit.putString("username", "Rishabh");
edit.putString("password", "rishabh123");


edit.commit();

ПОСЛЕДОВАТЕЛЬНЫЕ ПРЕДПОЧТЕНИЯ:

 SharedPreferences pref = getSharedPreferences("MyPrefs", Context.MODE_PRIVATE);

  String username = pref.getString("username", "");
  String password= pref.getString("password", "");

  Log.d(TAG, username);
  Log.d(TAG, password);