Android Studio 사용법을 배우고 있으며 내 활동 상태를 저장하려고합니다. onSaveInstanceState 메소드에 문제가있는 이유는 코드를 실행할 때 savedInstanceState가 항상 null이기 때문입니다. 문제를 해결하려면 어떻게해야합니까? 나는 몇 시간 동안 노력해 왔고 무엇이 잘못되었는지 보지 못했습니다. 여기에 mainActivity 파일과 관련된 내용이 있습니다.활동의 상태를 올바르게 저장하고 복원하는 방법은 무엇입니까?
public class MainActivity extends AppCompatActivity {
public final static String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE";
static final String LAST_MESSAGE = "com.example.myfirstapp.LAST_MESSAGE";
String message, displayMessage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
System.out.println("Restoring");
System.out.println(savedInstanceState);
if (savedInstanceState != null) {
displayMessage = "Last Saved Message: " + savedInstanceState.getString(LAST_MESSAGE);
}
else {
displayMessage = "No Messages Saved!";
}
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, displayMessage, Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
savedInstanceState.putString(LAST_MESSAGE, message);
super.onSaveInstanceState(savedInstanceState);
}
public void sendMessage(View view) {
Intent intent = new Intent(this, DisplayMessageActivity.class);
EditText editText = (EditText) findViewById(R.id.edit_message);
message = editText.getText().toString();
intent.putExtra(EXTRA_MESSAGE, message);
startActivity(intent);
}
}
어떻게'savedInstanceState'가있을 것으로 기대합니까? 해당 액티비티로'startActivity'를하면 저장되지 않습니다. 화면 회전을 시도 했습니까? –
'onSaveInstanceState' 메소드가 어떻게 트리거되는지 [이 다이어그램] (https://developer.android.com/images/fundamentals/restore_instance.png)에서 참조 할 수 있습니다. –
코드에서 데이터는 화면을 회전 할 때만 저장됩니다. 간단한 데이터를 저장하려면 Sharedpreference를 사용하거나 대용량 데이터를 저장하는 경우 데이터베이스 (예 : SQLite, Realm ...)로 저장할 수 있습니다. –