【问题标题】:savedpreferences not working on reboot on an android board已保存的首选项无法在 android 板上重新启动
【发布时间】:2012-12-21 08:33:59
【问题描述】:

从上周开始,我在保存的首选项方面遇到了一个奇怪的问题。

我正在开发一个与 android 兼容的电路板。

我面临的实际问题是,

我有 4 个按钮,点击按钮我正在更改按钮的背景图片

Onfirstclick -> 将按钮的背景图像更改为高亮显示 -> 第二次单击 -> 更改为正常背景图像,在第一次运行时我保持正常的背景按钮图像

但在重新启动时,尽管我正在使用共享首选项,但按钮背景图像并未保存在我的工作板上。

我有一个用于打开和关闭的电源按钮,我用它来重新启动我的开发板。

无论我有什么图像(正常/突出显示)我在 onclick 中都应该在重新启动板后获得该图像

好处是

           the code is working perfectly in android mobile but not in my board

这是我的代码。

我们总是感谢任何帮助。

   public class SharedprefsActivity extends Activity  {

    protected static final String TAG = "HvacActivity";
    /** Called when the activity is first created. */
    private Button seatdirnbtn;
    private SharedPreferences prefs;
    private String prefName = "MyPref";
    private SharedPreferences.Editor editor;
    private boolean isclick;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        seatdirnbtn = (Button) findViewById(R.id.seatdirnbtn);      
        seatdirnbtn.setOnClickListener(listner1);       
    }

    public void onResume() {
        super.onResume();
        getPrefAndButtonState();        
    }

    public void onPause() {
        super.onPause();
        setPrefAndButtonState();
    }

    @Override
    public void onRestart() {
        super.onRestart();
        getPrefAndButtonState();
    }

    @Override
    public void onStop() {
        super.onStop();
        setPrefAndButtonState();
    }

    public void getPrefAndButtonState(){
        prefs = this.getSharedPreferences(prefName, MODE_PRIVATE);
        isclick = prefs.getBoolean("prefName", false);
        System.out.println("bool? " + isclick);
        if (isclick) {
            seatdirnbtn.setBackgroundResource(R.drawable.icon4hlt);
        } else if (!isclick) {
            seatdirnbtn.setBackgroundResource(R.drawable.icon4);
        }
    }

    public void setPrefAndButtonState(){
        editor = prefs.edit();
        editor.putBoolean("prefName", isclick);
        editor.commit();        
        getPrefAndButtonState();
    }

    private View.OnClickListener listner1 = new View.OnClickListener() {    
        public void onClick(View v) {   
            if (isclick) {
                isclick = false;
                setPrefAndButtonState();            
            } else if (!isclick) {
                isclick = true;
                setPrefAndButtonState();
            }   
        }
    };
}

【问题讨论】:

  • 我无法解决您的问题,但我可以告诉您,您可以删除您的onStop()onRestart()onPause() 总是在 onStop() 之前被调用,并且您不必设置两次首选项。 onResume() 总是在 onRestart() 之后被调用,所以你也得到了两次首选项。编辑:androidjavadoc.com/1.0_r1_src/android/app/doc-files/…(只是 Google 'android 活动生命周期')
  • 谢谢,但我不明白它如何在我的手机上完美运行。
  • 我只是说这两种方法已经过时,可以删除而不会产生任何后果。由于这并不能回答您的问题,因此我没有将其发布为答案。因为不是。

标签: android button save sharedpreferences


【解决方案1】:

尝试使用getApplicationContext() 代替this 作为:

setPrefAndButtonState 方法中:

public void setPrefAndButtonState(){
      prefs = getApplicationContext().
                getSharedPreferences(prefName, MODE_PRIVATE); <<missing this line
      editor = prefs.edit();
      editor.putBoolean("prefName", isclick);
      editor.commit();        
      getPrefAndButtonState();
    }

getPrefAndButtonState方法中

public void getPrefAndButtonState(){
    prefs = getApplicationContext().getSharedPreferences(prefName, MODE_PRIVATE);
    isclick = prefs.getBoolean("prefName", false);
    System.out.println("bool? " + isclick);
    if (isclick) {
        seatdirnbtn.setBackgroundResource(R.drawable.icon4hlt);
    } else if (!isclick) {
        seatdirnbtn.setBackgroundResource(R.drawable.icon4);
    }
}

【讨论】:

  • 非常感谢您的回复,但是在第一次单击时,我得到了高亮显示的图像,而在 rebot 上,我得到了我想要的高亮显示图像。没关系,但图像正常如果我重新启动,我会得到突出显示的图像,这不应该发生。在这里我只想要正常的图像。有什么建议吗?
  • @Capricorn : 问题是重启时你想要正常的图像吗?
  • 无论我在重启前有什么背景图像,我都应该在重启后得到它。如果我有正常的背景图像,那么在重新启动之前,我应该在重新启动后得到相同的结果。高亮按钮背景也一样。如果我在重新启动前有高亮背景但在重新启动前没有正常背景,这里它可以工作。
  • @Capricorn :等待我根据您的要求更改您的代码。谢谢
  • @Capricorn : 哪个图像从 icon4hlt 或 icon4 突出显示?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-27
  • 2011-10-08
相关资源
最近更新 更多