2016-07-30 4 views
-1

ナビゲーション中に複数のアクティビティのデータをどのように保存できるかを知りたかったのです。複数のアンドロイドアクティビティでデータを保存する

私のアプリケーションには2種類のフォームがあります。account detailspersonal detailsはそれぞれ独自のアクティビティを使用しています。ユーザーがaccount detailsアクティビティのnextボタンをクリックすると、アクティビティはpersonal detailsになります。 personal detailsアクティビティには、ユーザーをaccount detailsアクティビティに戻すための戻るボタンがあります。私が欲しいもの

は、ユーザーがnextボタンをクリックしたときに、ユーザーがaccount details活動に戻ったときに、それを表示することができるように、それはaccount details活動中のデータを保存するということです。また、ユーザがpersonal detailsアクティビティにデータを入力し、backをクリックしてaccount detailsアクティビティに戻ると、personal detailsアクティビティのデータを保存して、ユーザがpersonal detailsアクティビティに再度移動したときに、自分のデータを見つけることができるようにします。

私が行っていることはonActivityResultメソッドをオーバーライドしていると示されているようaccount details活動中のデータを保存するためにいくつかのメソッドを追加しました:

package com.example.karyukie.application; 

import android.app.Activity; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.os.Bundle; 
import android.support.v7.app.AlertDialog; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.text.InputType; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.LinearLayout; 
import android.widget.Spinner; 
import android.widget.TextView; 
import android.widget.Toast; 

public class AccountDetails extends AppCompatActivity { 

EditText usernameSignUp, newPwd, confirmPwd, securityA; 
Spinner securityQ; 

private static final String USERNAME_SIGN_UP = "usernameSignUp_key"; 
private static final String PWD_SIGN_UP = "pwdSignUp_key"; 
private static final String SECURITY_Q = "securityQ_key"; 
private static final String SECURITY_A = "securityA_key"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    usernameSignUp = (EditText) findViewById(R.id.usernameSignUp_editText); 
    newPwd = (EditText) findViewById(R.id.newPwd_editText); 
    confirmPwd = (EditText) findViewById(R.id.confirmPwd_editText); 
    securityQ = (Spinner) findViewById(R.id.securityQ_spinner); 
    securityA = (EditText) findViewById(R.id.securityA_editText); 

    securityQ.setSelection(9); 

    Button next = (Button) findViewById(R.id.next_button); 
    assert next != null; 
    next.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
       Bundle accountDetails_data = saveData(); 
       Intent intent = new Intent(getApplicationContext(), PersonalDetails.class); 
       intent.putExtras(accountDetails_data); 
       startActivityForResult(intent, 1); 
      } 
     } 
    }); 

public Bundle saveData() { 
    String usernameSignUp_value = usernameSignUp.getText().toString(); 
    String pwdSignUp_value = newPwd.getText().toString(); 
    int securityQ_value = securityQ.getSelectedItemPosition(); 
    String securityA_value = securityA.getText().toString(); 

    Bundle data = new Bundle(); 

    data.putString(USERNAME_SIGN_UP, usernameSignUp_value); 
    data.putString(PWD_SIGN_UP, pwdSignUp_value); 
    data.putInt(SECURITY_Q, securityQ_value); 
    data.putString(SECURITY_A, securityA_value); 

    return data; 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if(requestCode == 1) { 
     if(resultCode == Activity.RESULT_OK) { 
      usernameSignUp.setText(data.getStringExtra(USERNAME_SIGN_UP)); 
      newPwd.setText(data.getStringExtra(PWD_SIGN_UP)); 
      confirmPwd.setText(data.getStringExtra(PWD_SIGN_UP)); 
      securityQ.setSelection(data.getIntExtra(SECURITY_Q, 10)); 
      securityA.setText(data.getStringExtra(SECURITY_A)); 
     } 
    } 
} 

そしてpersonal details活動に:

Button back = (Button) findViewById(R.id.back_button); 
    assert back != null; 
    back.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Bundle data = getIntent().getExtras(); 
      Intent intent = new Intent(); 
      intent.putExtras(data); 
      setResult(Activity.RESULT_OK, intent); 
      finish(); 
     } 
    }); 

それはように見えますうまく動作しますが、前述のようにデータをpersonal detailsアクティビティに保存する方法を理解することはできません。

+1

インテントはアクティビティ間でデータを送信するのに適していますが、アプリケーション全体で永続的なストレージのためのオプションがあります。 https://developer.android.com/training/basics/data-storage/index.html –

答えて

1

インテントを使用してデータを渡したくない場合。 Shared Preferencesを使用して、アクティビティ間でデータを共有することもできます。使用後(例として、文字列データを使用する)ストアを

SharedPreferences sharedPreferences = context.getSharedPreferences();

を::

sharedPreferences.edit().putString("key", "value").apply(); 

をして使用してデータを取得する:

あなたは呼び出すことにより、好みオブジェクトを取得することができます

sharedPreferences.getString("key", "default_value"); 
+1

ありがとうございます。あなたはいくつかのコードを与えることで詳しく説明しますか? –

+0

@brayokarisこの回答にコードが含まれることに同意しますが、リンクをたどってデータの保存と読み込みの方法を見つけることもできます。 –

+0

@brayokaris私の編集をご覧ください。私はあなたがドキュメントを読む時間を取ることをお勧めしますが。 –

0

ユーザーがアカウントの詳細から相手に戻るとあとは、個人情報のアクティビティをまだ完了していない場合はデータを保存する必要はなく、その逆もあります。

パブリック静的変数にデータを保存できます。これが最も簡単な方法です。アクティビティ間のインテントを持つデータも転送できます。

関連する問題