Ответ 1
Возможно, вы не сэкономите на setOnEditorActionListener. Сохраните, когда вы перейдете к другому действию. Потому что, когда он переходит к различной активности, setOnEditorActionListener editText.getText(). ToString() возвращает null.
Я просто пытаюсь сохранить вход пользователя из 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();
Возможно, вы не сэкономите на setOnEditorActionListener. Сохраните, когда вы перейдете к другому действию. Потому что, когда он переходит к различной активности, setOnEditorActionListener editText.getText(). ToString() возвращает null.
Очень важно: вам нужно имя предпочтения (например: "MY_PREFS_NAME" ), чтобы установить и получить значения:
SharedPreferences.Editor keywordEditor = context.getSharedPreferences("MY_PREFS_NAME", MODE_PRIVATE).edit();
Используйте одно и то же постоянное имя предпочтения, и оно предоставит вам те же настройки в любой точке вашего приложения.
ХРАНЕНИЕ ПРЕДПОЧТЕНИЙ:
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);
Добавьте это в качестве примера, если вы пропустили ключевые компоненты. В настоящее время это работает для меня:
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" - новое сохраненное значение.
Создать 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;
});
ХРАНЕНИЕ ПРЕДПОЧТЕНИЙ:
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);