2016-07-13 4 views
0

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); 
    } 
} 
+0

어떻게'savedInstanceState'가있을 것으로 기대합니까? 해당 액티비티로'startActivity'를하면 저장되지 않습니다. 화면 회전을 시도 했습니까? –

+0

'onSaveInstanceState' 메소드가 어떻게 트리거되는지 [이 다이어그램] (https://developer.android.com/images/fundamentals/restore_instance.png)에서 참조 할 수 있습니다. –

+0

코드에서 데이터는 화면을 회전 할 때만 저장됩니다. 간단한 데이터를 저장하려면 Sharedpreference를 사용하거나 대용량 데이터를 저장하는 경우 데이터베이스 (예 : SQLite, Realm ...)로 저장할 수 있습니다. –

답변

관련 문제