2

EditTextフィールドにユーザーエントリを保存しようとしていますが、アプリケーションを終了しても表示されません。

たとえば、ユーザーは自分の名前を入力してからアプリケーションを終了します。ユーザーがアプリケーションに戻って起動すると、ユーザー名がEditTextフィールドに表示されます。しかし、これを機能させることはできません。これはsharedPreferencesと関係があると思いますが、どこが間違っているのかわかりません。

私はAndroidとJavaにまったく慣れていないので、これを見つけるのは非常に困難です。どんな助けでも大歓迎です。

public class MainActivity extends Activity {
     public final static String EXTRA_FROM = "com.example.assignment1.FROM";


     @Override
        protected void onSaveInstanceState(Bundle outState)
        {
            super.onSaveInstanceState(outState);
            EditText emailFrom =(EditText) findViewById(R.id.editEmailFrom);
            String from = emailFrom.getText().toString();
            outState.putString(EXTRA_FROM, from);
        }

        @Override
        protected void onRestoreInstanceState(Bundle savedState)
        {

            EditText emailFrom =(EditText) findViewById(R.id.editEmailFrom);
            String from = savedState.getString(EXTRA_FROM);
            emailFrom.setText(from);

        }

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

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

    public void emailSend (View sendButton) 
    {
        Intent intent = new Intent(this,DisplayEmailActivity.class);

        EditText emailFrom =(EditText) findViewById(R.id.editEmailFrom);
        String from = emailFrom.getText().toString();
        intent.putExtra(EXTRA_FROM,from);

        SharedPreferences saveFrom = getSharedPreferences(EXTRA_FROM, MODE_PRIVATE);
        Editor editor = saveFrom.edit();
        editor.putString(EXTRA_FROM, from);
        editor.commit();

        String storedfrom = saveFrom.getString(EXTRA_FROM, from);
        emailFrom.setText(storedfrom);

        startActivity(intent);
    }

2番目のアクティビティ

 public class DisplayEmailActivity extends Activity {

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_display_email);

            Intent intent = getIntent();

            String from = intent.getStringExtra(MainActivity.EXTRA_FROM);
            TextView textFrom =(TextView)findViewById(R.id.displayEmailFrom);
            textFrom.setText(from);

        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.activity_display_email, menu);
            return true;
        }
4

2 に答える 2

3

さて、に値を保存した後、EditText emailFrom次のようにSharedPreferencesに保存する必要があります。

String from = emailFrom.getText().toString(); // Getting String value from EditText and storing it in "from" String
SharedPreferences settings = getSharedPreferences("MyPreferencesFile", 0); // Opening SharedPreferences 
SharedPreferences.Editor editor = settings.edit(); // Opening editor for SharedPreferences
editor.putString("exampleName", from); // You are putting here a String "from" and give it a "exampleName" name. Later you will use this name to restore data.

次に、アプリケーションを起動するときに、SharedPreferencesからデータをロードする必要があります。

SharedPreferences settings = getSharedPreferences("MyPreferencesFile", 0); // Again opening SharedPreferences
String from = settings.getString("exampleName", ""); // The second argument is the default value. The default value will be set if there wasn't saved any data with "exampleName" name
if(from != "") // If "from" is not empty, it means that the data was stored in SharedPreferences
   emailFrom.setText(from); // Setting text in your EditText
于 2012-10-10T21:40:32.580 に答える
0

EditTextのコンテンツを保存および復元するためにとを使用onSaveInstanceState()しています。onRestoreInstanceState()ただし、このメソッドは、アプリケーションがOSによって終了され、すぐに再作成される場合(つまり、デバイスのローテーション)にのみ呼び出されます。

アプリケーションがユーザーによって終了されたときに値を保持したい場合は、ファイル、データベース、またはあなたの場合はSharedPreferencesをどこかに保存する必要があります。

同様の質問に対する回答をSharePreferencesに投稿しました

幸運を。

于 2012-10-10T21:43:33.073 に答える