Страница 1 из 1

Урок 33. Работа с 2 константами в Preferences. Не выходит

Добавлено: 19 апр 2015, 12:44
z1key
Объясняю проблему.
Захотелось мне чтобы текст который я сохраняю кнопкой "Save" сохранялся в одну ячейку и вызывался обратно только по нажатию кнопки "Load", а также чтобы текст который был введен до onDestroy выводился после onCreate.
Константы, едиторы и преференсы. Проблема в том, что Текст который сохраняется при onDestroy сохраняется так же и в "Save". Таким образом текст который я сохранял вручную перезаписывается. Помогите решить задачу.

Код: Выделить всё

package ru.startandroid.sharedpreferences;

import android.content.SharedPreferences;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import java.util.Set;


public class MainActivity extends ActionBarActivity implements View.OnClickListener{

    EditText editText;
    Button btnSave, btnLoad, btnClear;
    SharedPreferences pref, prefDestroy;

    final String SAVED_TEXT = "";
    final String SAVED_TEXT_ON_DESTROY = "";

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

        editText = (EditText) findViewById(R.id.editText);
        btnSave = (Button) findViewById(R.id.btnSave);
        btnLoad = (Button) findViewById(R.id.btnLoad);
        btnClear = (Button) findViewById(R.id.btnClear);

        btnSave.setOnClickListener(this);
        btnLoad.setOnClickListener(this);
        btnClear.setOnClickListener(this);

        prefDestroy = getPreferences(MODE_PRIVATE);
        String savedText = prefDestroy.getString(SAVED_TEXT_ON_DESTROY,"");

        if (savedText.length() > 0) {
            editText.setText(savedText);
            Toast.makeText(this, "Text loaded", Toast.LENGTH_SHORT).show();
        }
}
    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.btnSave:
                saveText();
                break;
            case R.id.btnLoad:
                loadText();
                break;
            case R.id.btnClear:
                editText.getText().clear();
                break;
            default:
                break;
        }
    }

    private void saveText() {
        pref = getPreferences(MODE_PRIVATE);
        SharedPreferences.Editor ed = pref.edit();
        ed.putString(SAVED_TEXT, editText.getText().toString());
        ed.commit();
        Toast.makeText(this, "Text Saved", Toast.LENGTH_SHORT).show();
    }
    private void saveTextOnDestroy() {
        prefDestroy = getPreferences(MODE_PRIVATE);
        SharedPreferences.Editor edd = prefDestroy.edit();
        edd.putString(SAVED_TEXT_ON_DESTROY, editText.getText().toString());
        edd.commit();

        Toast.makeText(this, "Text Saved",Toast.LENGTH_SHORT).show();

    }
    private void loadText(){
        pref = getPreferences(MODE_PRIVATE);
        String savedText = pref.getString(SAVED_TEXT,"");
        editText.setText(savedText);
        Toast.makeText(this,"Text loaded",Toast.LENGTH_SHORT).show();

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        saveTextOnDestroy();
    }
}
Проблема решилась неожиданно:

Код: Выделить всё

    final String SAVED_TEXT = "1";
    final String SAVED_TEXT_ON_DESTROY = "2";
Присвоил разные значения для констант :)

Однако проблема не исчезла!

Результаты теста приложения:
editText - "Привет"
Кнопка "Save" > Toast "Text Saved"
Кнопка "Clear" > editText = ""
Кнопка "Load" > edittext = "Привет"
Клавиша "Back" > Toast "Text Saved" // Текстовые константы приобретают одинаковые значения "Привет", приложение закрывается.
Запускаем приложение > editText = "Привет"
Дальше интересно)))))
editText = "Пока"
Клавиша "Back" > Toast "Text Saved"
Запускаем приложение > editText = "Пока"
Кнопка "Load" > edittext = "Пока" !!!

Произошла потеря данных. Неужели еще прийдется дописывать код чтобы константы в процессе работы приложения опять не стали одинаковыми????

Re: Урок 33. Работа с 2 константами в Preferences. Не выход

Добавлено: 19 апр 2015, 13:26
z1key
Проблема снова решилась.

static final String SAVED_TEXT = "1";
static final String SAVED_TEXT_ON_DESTROY = "2";