#java #android #sharedpreferences
#java #Android #sharedpreferences
Вопрос:
Я пытаюсь проверить, есть ли значение в общих настройках, если нет, будет отображено диалоговое окно с предупреждением EditText для добавления значения.
Более того, пока все идет хорошо, и отображается, и значение вставлено и сохранено.
Подробнее когда приложение закрывается и открывается снова, оно отображает диалоговое окно с повторным запросом значения, которое больше не присваивается общим предпочтениям
Это мой код:
public void checkValue() {
SharedPreferences sp = getSharedPreferences("USERCODE", 0);
if (sp.getString("tag", "") != null)
{
openAlert();
}
else
{
Toast.makeText(getBaseContext(), "Existing value.", Toast.LENGTH_SHORT).show();
}
}
private void openAlert()
{
mValue = getSharedPreferences("PREFERENCE", MODE_PRIVATE).getBoolean("mValue", true);
if (mValue)
{
AlertDialog.Builder mAlertDialog = new AlertDialog.Builder(this);
final View customLayout = getLayoutInflater().inflate(R.layout.alert_dialog, null);
final EditText userInput = customLayout.findViewById(R.id.alertdialogEditTextCode);
mAlertDialog.setView(customLayout);
mAlertDialog.setCancelable(false);
mAlertDialog.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton)
{
String value = userInput.getText().toString();
SharedPreferences sp = getSharedPreferences("USERCODE", 0);
SharedPreferences.Editor preferencesEditor = sp.edit();
preferencesEditor.putString("tag", value);
preferencesEditor.commit();
updatdCode();
Toast.makeText(getBaseContext(), "Código salvo com sucesso!", Toast.LENGTH_SHORT).show();
dialog.dismiss();
}
});
mAlertDialog.show();
getSharedPreferences("PREFERENCE", MODE_PRIVATE).edit().putBoolean("mValue", true).commit();
}
}
private void updatdCode()
{
SharedPreferences sp = getSharedPreferences("USERCODE", 0);
String data = sp.getString("tag", "");
mTextView = (TextView) findViewById(R.id.game_title);
mTextView.setText(data);
}
}
Как это можно решить?
Проблема была решена с использованием строки и вызова updatdCode (); в начале.
package com.vanderclin.app;
import android.app.*;
import android.content.*;
import android.os.*;
import android.view.*;
import android.widget.*;
import com.vanderclin.app.*;
public class MainActivity extends Activity
{
private boolean mValue;
private TextView mTextView;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
SharedPreferences sp = this.getSharedPreferences("USERCODE", 0);
String usercode = sp.getString("CODE", "");
updatdCode();
if (usercode == "")
{
Toast.makeText(getBaseContext(), "User not registered.", Toast.LENGTH_LONG).show();
mValue = getSharedPreferences("PREFERENCE", MODE_PRIVATE).getBoolean("mValue", true);
if (mValue)
{
AlertDialog.Builder mAlertDialog = new AlertDialog.Builder(this);
final View customLayout = getLayoutInflater().inflate(R.layout.alert_dialog, null);
final EditText userInput = customLayout.findViewById(R.id.alertdialogEditTextCode);
mAlertDialog.setView(customLayout);
mAlertDialog.setCancelable(false);
mAlertDialog.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton)
{
String value = userInput.getText().toString();
SharedPreferences sp = getSharedPreferences("USERCODE", 0);
SharedPreferences.Editor preferencesEditor = sp.edit();
preferencesEditor.putString("CODE", value);
preferencesEditor.commit();
updatdCode();
Toast.makeText(getBaseContext(), "Code saved successfully!", Toast.LENGTH_SHORT).show();
dialog.dismiss();
}
});
mAlertDialog.show();
getSharedPreferences("PREFERENCE", MODE_PRIVATE).edit().putBoolean("mValue", true).commit();
}
}
else
{
Toast.makeText(getBaseContext(), "Registered user.", Toast.LENGTH_LONG).show();
}
}
private void updatdCode()
{
SharedPreferences sp = getSharedPreferences("USERCODE", 0);
String data = sp.getString("CODE", "");
mTextView = findViewById(R.id.mainTextView);
mTextView.setText(data);
}
}```
Ответ №1:
Исходя из ответа Брайана Х., я немного изменяю его
if (sp.getString("tag", "").equals(""))
{
openAlert();
}
Значение по умолчанию равно ""
, поэтому вы должны сравнить с пустой строкой. Если оно равно, то это означает, что в shared preference нет значения.
Извините, я пока не могу прокомментировать.
Комментарии:
1. Даже при использовании пустой строки значения оно остается неизменным.
2. Как насчет использования проводника файлов устройства и перехода в data / data/yourapp / shared_prefs, чтобы проверить, работает ли он должным образом и действительно ли выполняется запись в файл. Не забывайте синхронизировать каждый раз, когда вы выполняете действие с shared_prefs!
3. Выполнив несколько тестов, мне удалось решить проблему.
Ответ №2:
sp.getString(«тег», «»)
Результатом этого никогда не может быть null, потому что, если не удается найти в SharePreference
, оно вернет значение по умолчанию, которое ""
вы просто объявляете в качестве второго аргумента.
Итак, вы должны изменить на
if (!sp.getString("tag", "").equals(""))
Комментарии:
1. Я только что выполнил тест, но проблема продолжается.
2. Выполнив несколько тестов, мне удалось решить проблему.