【问题标题】:Save the data and using it after restarting the app Android保存数据并在重启应用程序后使用它 Android
【发布时间】:2013-08-20 17:22:35
【问题描述】:

我正在创建一个简单的应用程序,用户可以在其中更改搜索栏的值。将默认值设置为0,setMax设置为5。每次关闭并重新启动应用程序时,seekbar值都设置为0。如何使用和设置关闭应用程序之前设置的上一个seekbar值。

这是我的活动课>

public class MainActivity extends Activity {

SeekBar s;
TextView v;
public int n;

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

    s=(SeekBar)findViewById(R.id.seekBar1);
    v=(TextView)findViewById(R.id.textView1);
    next=(Button)findViewById(R.id.button1);

    s.setProgress(n);
    v.setText(n+" ");

    s.setOnSeekBarChangeListener(new OnSeekBarChangeListener(){

        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            // TODO Auto-generated method stub
            n = progress;
            v.setText(n+" ");

        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
            // TODO Auto-generated method stub
            v.setText(n+" ");
        }

    });
  }
}

我尝试使用 onSaveInstanceState 和 onRestoreInstanceState 但未能恢复到之前的状态。 请帮忙

提前致谢。

【问题讨论】:

  • 共享首选项是您想要的:stackoverflow.com/questions/3624280
  • 我在共享首选项中尝试了所有可能的东西。但未能获取保存的数据。请帮助我。我只想保存进度,即 "n" ,并在应用程序重新启动后检索它

标签: java android eclipse savestate


【解决方案1】:

首先,onSaveInstance 和 onRestoreInstance 方法只被触发,当由于方向改变发生销毁时,因此你不能使用这个机制来达到这个目的,为了在显式销毁活动后存储以前的值,你可以使用android 提供的持久化机制之一。 SharedPreferences 或 SQLiteDB 在销毁 Activity 之前保存它们,并在 Activity 启动时恢复。

若要获取最新值,您必须在 onCreate 方法中添加此代码:

private SharedPreferences prefs;
private int progress;

protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);        
 prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
 progress = prefs.getInt("myProgress", 0);

}

//要在activity被销毁之前一直存储它,你必须在onPause中添加这段代码:

protected void onPause() {
  super.onPause();
  Editor editPrefs = prefs.edit();
  editPrefs.putInt("myProgress", newProgressValue);
  editPrefs.commit();

}

希望这会有所帮助。

问候!

【讨论】:

  • 我在共享首选项中尝试了所有可能的东西。但无法获取保存的数据。请帮助我。我只想保存进度,即 "n" ,并在应用程序重新启动后检索它。
  • 非常感谢!这行得通。但还有一个问题是如何检查用户是否是第一次打开应用程序?
  • 您可以像我为进度所做的那样使用首选项,您只需要知道 prefs.getInt("yourTag", defaultValue) 将在没有首选项时返回默认值存储在其中,这就是您知道它第一次打开的标志,之后您立即向其中写入了一些内容,所以现在您知道该应用程序之前存储了一些内容,因此该应用程序之前已经启动过......您可能想要顺便说一下,只使用布尔值而不是 int
【解决方案2】:

您可能需要查看开发人员指南中的存储选项。

具体来说,Shared Preferences 似乎是一个不错的起点。

【讨论】:

    【解决方案3】:

    你可以尝试使用SQL数据库,关闭再打开应用程序后数据库仍然可用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-16
      • 1970-01-01
      • 2015-05-31
      • 2017-05-08
      • 2019-11-05
      • 2010-12-18
      相关资源
      最近更新 更多