Проверка с помощью if и else, есть ли значение в sharedpreference

#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. Выполнив несколько тестов, мне удалось решить проблему.