在多个Android活动中保存数据

时间:2016-07-30 21:39:10

标签: android

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

我的应用程序中有2个表单account detailspersonal details,每个表单都有自己的活动。当用户点击next活动中的account details按钮时,会将他带到personal details活动。 personal details活动还有一个后退按钮,可将用户带回account details活动。

我想要的是,当用户点击next按钮时,它会将数据保存在account details活动中,以便在用户返回account details时显示该数据活动。此外,当用户在personal details活动中输入数据并可能通过点击account details移回back活动时,应保存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活动中保存数据,如前所述。

2 个答案:

答案 0 :(得分:1)

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

您可以通过调用以下方式获取首选项对象:

self.bad_method()

然后(以String数据为例)使用:

存储
bad_method

并使用以下方式获取数据:

SharedPreferences sharedPreferences = context.getSharedPreferences();

答案 1 :(得分:0)

当用户点击帐户详细信息返回给个人时,如果您尚未完成个人详细信息活动,则无需保存数据,反之亦然。

您可以在公共静态变量上保存数据。这是最简单的方法,您也可以使用活动之间的意图传输数据。