SharedPreferences никогда не получит значение ключа по умолчанию - PullRequest
0 голосов
/ 24 октября 2019

Это мой код:

package com.example.scheda_ais;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import java.io.File;

public class MainActivity extends AppCompatActivity {
    EditText degustatore;
    Button completa;
    SharedPreferences sharedPref;
    String generalita;
    String appoggio;

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

    sharedPref = this.getSharedPreferences("il_sottoscritto",Context.MODE_PRIVATE);
    degustatore = findViewById(R.id.degustatore);

    completa = findViewById(R.id.completa);
    completa.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            generalita = degustatore.getText().toString();

            if(generalita != ""){
                SharedPreferences.Editor editor = sharedPref.edit();
                editor.putString("generalita", generalita);
                editor.commit();
            }


            appoggio = sharedPref.getString("generalita", "vuoto");
            Log.d("generalita", appoggio);
        }
    });
}

Когда я нажимаю кнопку с пустым EditText (без ввода), Log ничего не печатает, в то время как Log должен печатать "generalita" +"vuoto" .
Почему Строка appoggio пуста?
Если я что-то введу в EditText, журнал напечатает правильно "generalita" + appoggio .
Пожалуйста, кто-нибудь, помогите мне. Спасибо.

Ответы [ 4 ]

1 голос
/ 24 октября 2019

Используя! = Для сравнения вашей строки, вы сравниваете «экземпляр объекта», но «», и строка generalita - это не один и тот же объект, поэтому вы вводите в if и ставите «» в соответствии со своими предпочтениями, поэтому предпочтение не является нулевым, когдаВы регистрируете его, и значение по умолчанию не печатается.

вот что получается:

sharedPref = this.getSharedPreferences("il_sottoscritto",Context.MODE_PRIVATE);
degustatore = findViewById(R.id.degustatore);

completa = findViewById(R.id.completa);
completa.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        generalita = degustatore.getText().toString();

        // generalita instance and "" intance are not equal so the trest will pass
        if(generalita != ""){
            SharedPreferences.Editor editor = sharedPref.edit();
            // here you're putting "" to your preference
            editor.putString("generalita", generalita);
            editor.commit();
        }

        // sharedPref.getString("generalita", "vuoto") return ""
        appoggio = sharedPref.getString("generalita", "vuoto");
        Log.d("generalita", appoggio);
    }
});

вы должны сделать это

completa.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        generalita = degustatore.getText().toString();

        if(!generalita.equals("")){
            SharedPreferences.Editor editor = sharedPref.edit();
            editor.putString("generalita", generalita);
            editor.commit();
        }

        appoggio = sharedPref.getString("generalita", "vuoto");
        Log.d("generalita", appoggio);
    }
});
1 голос
/ 24 октября 2019

изменить appoggio = sharedPref.getString("generalita", "vuoto");

на appoggio = sharedPref.getString("generalita", "");

0 голосов
/ 24 октября 2019

Замените generalita != "" на !generalita.isEmpty(), чтобы проверить длину вашей строки.

0 голосов
/ 24 октября 2019

Есть две проблемы с тем, что вы написали.

Как правильно сказал @SebastienRieu, вы не можете сделать == для строк в java.

Вам нужно написать:

if(!"".equals(generalita)){
    SharedPreferences.Editor editor = sharedPref.edit();
    editor.putString("generalita", generalita);
    editor.commit();
}

И во-вторых, вы сказали, что ожидаете "generalita" + "vuoto". Однако в этом коде:

appoggio = sharedPref.getString("generalita", "vuoto");
Log.d("generalita", appoggio);

в журнале первое слово "generalita"не текст, напечатанный в журнале, а тег, который фильтруется. Если вы хотите увидеть «Дженералита вуото», то вам придется поставить оба на правой стороне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...