Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android应用程序中的计数器按钮无法与SharedReference一起正常工作_Android_Button_Sharedpreferences - Fatal编程技术网

Android应用程序中的计数器按钮无法与SharedReference一起正常工作

Android应用程序中的计数器按钮无法与SharedReference一起正常工作,android,button,sharedpreferences,Android,Button,Sharedpreferences,我遇到一个关于保存由按钮修改的整数的问题。按下按钮时,整数值上升;但是,当我关闭并重新打开应用程序时,不会保存整数。如果有任何帮助,我将不胜感激 public class MyActivity extends Activity implements View.OnClickListener { public static final String PREFS_NAME = "MyPrefsFile"; Button btn1; Button btn2; Button btn3; 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();

    }

}

您好,谢谢您的评论,当我添加这一行,它说是无法解决符号prefs。如果我添加Sharepreferences prefs;在publicstaticfinal中,我得到的putString不能在编辑器中应用