簡體   English   中英

Android應用程序中的計數器按鈕無法與SharedPreferences一起正常使用

[英]Counter Button in Android application is not working properly with SharedPreferences

我遇到有關保存由Button修改的整數的問題。 當按下Button ,整數值上升; 但是,當我關閉並重新打開應用程序時,不會保存整數。 我將不勝感激任何幫助。

public class MyActivity extends Activity implements View.OnClickListener {

public static final String PREFS_NAME = "MyPrefsFile";

Button btn1;
Button btn2;
Button btn3;
Button btn4;
Button save;
TextView textTitle;
EditText scoreText;
EditText scoreText2;
int counter = 0;

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

    btn1 = (Button) findViewById(R.id.add);
    btn2 = (Button) findViewById((R.id.sub));

    scoreText = (EditText) findViewById(R.id.intro);

    btn1.setOnClickListener(this);
    btn2.setOnClickListener(this);


    final SharedPreferences prefs = PreferenceManager
        .getDefaultSharedPreferences(this);

    scoreText.setText(prefs.getString("autosave" , ""));

    scoreText.addTextChangedListener(new TextWatcher() {

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            // Do nothing

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

            // Do nothing

        }

       @Override
       public void afterTextChanged(Editable s) {

           prefs.edit().putString("autosave", s.toString()).commit();

        }

    });

    @Override
    public void onClick(View v) {

        if (v == btn1) {

            counter++;
            scoreText.setText(Integer.toString(counter));

        } else if (v == btn2) {

        counter--;
        scoreText.setText(Integer.toString(counter));

        }

    }

}

首先,嘗試將commit()行移至onTextChanged()回調並添加Log.d()調用以幫助您進行調試。

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {

    Log.d("onTextChanged", s.toString());

    prefs.edit().putString("autosave", s.toString()).commit();

}

修改文本后檢查您的日志,以確保觸發了回調。

如果那不起作用,我建議將commit()行移到onClick()回調中。

@Override
public void onClick(View v) {

    if (v == btn1) {

        counter++;
        scoreText.setText(Integer.toString(counter));
        prefs.edit().putString("autosave", scoreText.getText()).commit();


    } else if (v == btn2) {

        counter--;
        scoreText.setText(Integer.toString(counter));
        prefs.edit().putString("autosave", scoreText.getText()).commit();

    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM