2016-07-30 61 views
-1

我想知道如何在导航过程中将数据保存在多个活动中。在多个android活动中保存数据

我在我的申请中有两种形式,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

如果您不想使用Intents传递数据。您还可以使用Shared Preferences在活动之间共享数据。使用

SharedPreferences sharedPreferences = context.getSharedPreferences();

然后(使用字符串数据为例)店:

你可以得到一个优惠对象通过调用

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

,并使用获得的数据:

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

谢谢。你会通过给出一些代码来详细说明吗? –

+0

@brayokaris虽然我同意这个答案应该包含代码,你也可以按照链接找到如何存储和加载数据... –

+0

@brayokaris请参阅我的编辑。虽然我建议您花时间阅读文档。 –

0

当用户从帐户详细信息中单击回到该人al,如果您尚未完成个人详细信息活动,则不必保存数据,反之亦然。

您可以将数据保存在公共静态变量中。这是最简单的方法,您还可以在活动之间传输数据。