第四课 横竖屏数据传输保存问题

android横竖屏是通过在res/layout为竖屏,res/layout-land为横屏。在切换时,因为加载了新的xml刷新了activity,所以数据会丢失

方法一

onSaveInstanceState(Bundle outState)

@Override
    protected void onSaveInstanceState(Bundle outState) {
        // TODO Auto-generated method stub
        String tBmi = "test";
        int advice = 1;
        // 通过outState的putString或者putInt等等方法保存数据
        outState.putString("bmi", tBmi);
        outState.putInt("advice", advice);
        super.onSaveInstanceState(outState);
    }

onRestoreInstanceState(Bundle savedInstanceState)

@Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        // 通过savedInstanceState.getXXX方法取回数据
        String tBmi = savedInstanceState.getString("bmi"));
        int advice = savedInstanceState.getInt("advice");
        super.onRestoreInstanceState(savedInstanceState);
    }

总结

这些数据都是保存在方法之间,临时存储

方法二

最前面声明 private SharedPreferences sp;

onPause()

@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
    // 通过myBmi连接onPause()和onResume()
    sp = getSharedPreferences("myBmi", Context.MODE_PRIVATE);
    // edit()开启保存数据
    ed = sp.edit();
    ed.putInt("advice", 2);
    ed.putString("bmi", "test");
    // commit()提交数据,就是保存到本地
    ed.commit();
}

onResume()

@Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();
    // sp获取到对象,然后保存对象并设置关键字myBmi
    sp = getSharedPreferences("myBmi", Context.MODE_PRIVATE);
    // 得到数据,第二个参数是默认数据,就是本地没有保存数据的时候会使用的
    String bmi = sp.getString("bmi", "No BMI");
    int advice = sp.getInt("advice", 1);
}

你可能感兴趣的:(第四课 横竖屏数据传输保存问题)