2015-05-23 1 views
0

Я установил условие в метод onCreate(), чтобы проверить, есть ли какие-то предыдущие данные или нет. Но это не работает. пожалуйста провери меня. И я не хочу использовать onRestoreSavedState() метод для this.dСохранение данных при изменении ориентации

public class ActivityOne extends Activity { 

Используйте их в качестве ключей, когда вы сохраняете состояние между реконфигурации

private static final String RESTART_KEY = "restart"; 
private static final String RESUME_KEY = "resume"; 
private static final String START_KEY = "start"; 
private static final String CREATE_KEY = "create"; 

Строка для LogCat документации

private final static String TAG = "Lab-ActivityOne"; 
private int mCreate=0, mRestart=0, mStart=0, mResume=0; 

Вам нужно будет увеличивать значения этих переменных при вызове соответствующих методов жизненного цикла .

TODO: Создание переменных для каждого из TextViews

private TextView mTvCreate, mTvRestart, mTvStart, mTvResume; 

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

TODO: Назначьте соответствующие TextViews переменным TextView

mTvCreate=(TextView)findViewById(R.id.create); 
    mTvRestart=(TextView)findViewById(R.id.restart); 
    mTvResume=(TextView)findViewById(R.id.resume); 
    mTvStart=(TextView)findViewById(R.id.start); 


    Button launchActivityTwoButton = (Button) findViewById(R.id.bLaunchActivityTwo); 
    launchActivityTwoButton.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      Intent intent=null; 
      intent = new Intent(v.getContext(),ActivityTwo.class); 
     startActivity(intent); 

     } 
    }); 
    if(savedInstanceState!=null){ 
     mCreate=savedInstanceState.getInt(String.valueOf(mCreate)); 
     mRestart=savedInstanceState.getInt(String.valueOf(mRestart)); 
     mResume=savedInstanceState.getInt(String.valueOf(mResume)); 
     mStart=savedInstanceState.getInt(String.valueOf(mStart)); 
    } 


    // Emit LogCat message 
    Log.i(TAG, "Entered the onCreate() method"); 
     mCreate++; 
     displayCounts(); 
} 

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 

информация о состоянии Сохранить с набором пар ключ-значение 4 строки кода, по одному для каждой переменной счетчика super.onSaveInstanceState (savedInstanceState);

savedInstanceState.putInt(String.valueOf(mCreate),mCreate); 
    savedInstanceState.putInt(String.valueOf(mRestart),mRestart); 
    savedInstanceState.putInt(String.valueOf(mResume),mResume); 
    savedInstanceState.putInt(String.valueOf(mStart),mStart); 

} 

Обновление отображаемых счетчики Этот метод предполагает, что счетчики и TextView переменных используют имена, указанные выше общественных недействительных displayCounts() {

mTvCreate.setText("onCreate() calls: " + mCreate); 
    mTvStart.setText("onStart() calls: " + mStart); 
    mTvResume.setText("onResume() calls: " + mResume); 
    mTvRestart.setText("onRestart() calls: " + mRestart); 

} 

}

ответ

1

Похоже, проблема заключается в том, что вы пытаетесь использовать значения, которые еще не были установлены при попытке захватить сохраненное значение.

Все, что вам нужно сделать, чтобы исправить это, следует использовать константы String, которые вы определили.

Так, в onCreate(), вы бы:

if(savedInstanceState!=null){ 
    mCreate=savedInstanceState.getInt(CREATE_KEY); 
    mRestart=savedInstanceState.getInt(RESTART_KEY); 
    mResume=savedInstanceState.getInt(RESUME_KEY); 
    mStart=savedInstanceState.getInt(START_KEY); 
} 

Затем в onSaveInstanceState(), вы бы:

savedInstanceState.putInt(CREATE_KEY,mCreate); 
savedInstanceState.putInt(RESTART_KEY,mRestart); 
savedInstanceState.putInt(RESUME_KEY,mResume); 
savedInstanceState.putInt(START_KEY,mStart);