Android-在活动之间传递ParseUser对象

Android-在活动之间传递ParseUser对象,android,parse-platform,Android,Parse Platform,在我的Android应用程序中,我有3项活动供用户填写个人资料并注册: 在第一活动登记处活动:用户可以填写他们的姓名、地址、电话号码、紧急联系人等 在第二个活动外观活动中:用户可以填写他们的种族、身高、体重、头发颜色、眼睛颜色等 在第三个活动PinsActivity:用户可以填写他们的Pin码、第二个Pin码和密码 我能够传递ParseUser对象,并在第一个活动和第二个活动中保存用户的输入。然而,在第三个活动中,我无法在解析时保存Pin码和密码。我使用Log.d检查userID,这对所有3

在我的Android应用程序中,我有3项活动供用户填写个人资料并注册:

  • 在第一活动登记处活动:用户可以填写他们的姓名、地址、电话号码、紧急联系人等
  • 在第二个活动外观活动中:用户可以填写他们的种族、身高、体重、头发颜色、眼睛颜色等
  • 在第三个活动PinsActivity:用户可以填写他们的Pin码、第二个Pin码和密码
我能够传递ParseUser对象,并在第一个活动和第二个活动中保存用户的输入。然而,在第三个活动中,我无法在解析时保存Pin码和密码。我使用Log.d检查userID,这对所有3个活动都是一样的,而且Pins和password字段都有值。我只是不明白为什么我不能在上一个活动中使用ParseUser对象的saveInBackground来保存PIN和密码。我想知道是否有专家能帮我解决这个问题。多谢各位

第一次注册活动: 公共类注册活动扩展活动{

protected EditText mFirstName;
protected EditText mMiddleName;
protected EditText mLastName;
protected EditText mUserEmail;
protected EditText mPhoneNumber;
protected EditText mAddressLine1;
protected EditText mAddressLine2;
protected EditText mEmergencyName;
protected EditText mEmergencyPhone;
protected EditText mEmergencyRelationship;
protected EditText mEmergencyOtherInfo;
protected Button mNextPageButton;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_register);

    //Parse.enableLocalDatastore(this);
    Parse.initialize(this, "XXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXX");

    //Initialize
    mFirstName = (EditText)findViewById(R.id.firstNameRegisterEditText);
    mMiddleName = (EditText)findViewById(R.id.middleNameRegisterEditText);
    mLastName = (EditText)findViewById(R.id.lastNameRegisterEditText);
    mUserEmail = (EditText)findViewById(R.id.emailRegisterEditText);
    mPhoneNumber = (EditText)findViewById(R.id.phoneRegisterEditText);
    mAddressLine1 = (EditText)findViewById(R.id.addressRegisterText);
    mAddressLine2 = (EditText)findViewById(R.id.address2RegisterText);
    mEmergencyName = (EditText)findViewById(R.id.emergencyNameEditText);
    mEmergencyPhone = (EditText)findViewById(R.id.emergencyPhoneEditText);
    mEmergencyRelationship = (EditText)findViewById(R.id.emergencyRelationshipEditText);
    mEmergencyOtherInfo = (EditText)findViewById(R.id.medicalInfoEditText);
    mNextPageButton = (Button)findViewById(R.id.nextPageButton);

    //Listen to register button click
    mNextPageButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //Get first name, middle name, last name, user email, phone number, address line 1, address line 2,
            //emergency name, emergency phone, emergency relationship, emergency other info and convert them to string
            String firstName = mFirstName.getText().toString().trim();
            String middleName = mMiddleName.getText().toString().trim();
            String lastName = mLastName.getText().toString().trim();
            String userEmail = mUserEmail.getText().toString().trim();
            String phoneNumber = mPhoneNumber.getText().toString().trim();
            String addressLine1 = mAddressLine1.getText().toString().trim();
            String addressLine2 = mAddressLine2.getText().toString().trim();
            String emergencyName = mEmergencyName.getText().toString().trim();
            String emergencyPhone = mEmergencyPhone.getText().toString().trim();
            String emergencyRelationship = mEmergencyRelationship.getText().toString().trim();
            String emergencyOtherInfo = mEmergencyOtherInfo.getText().toString().trim();

            //String password = mUserPassword.getText().toString().trim();

            final ParseUser user = new ParseUser();

            //Store user in parse
            user.put("firstName", firstName);
            user.put("middleName", middleName);
            user.put("lastName", lastName);
            user.put("email", userEmail);
            user.put("phoneNumber", phoneNumber);
            user.put("addressLine1", addressLine1);
            user.put("addressLine2", addressLine2);
            user.put("emergencyName", emergencyName);
            user.put("emergencyPhone", emergencyPhone);
            user.put("emergencyRelationship", emergencyRelationship);
            user.put("otherInfo", emergencyOtherInfo);
            user.put("username", userEmail);

            //Store empty values for username, password, and email because the signUpInBackground requires these fields
            //We will actually add these values in later
            user.setUsername(userEmail);
            user.setEmail(userEmail);
            user.setPassword("");

            //Need to call Signup first
            user.signUpInBackground(new SignUpCallback() {
                @Override
                public void done(ParseException e) {
                    if (e == null){
                        //Saved successfully
                        //Passing user object to AppearanceActivity and take user to appearance register page
                        Intent intent = new Intent(RegisterActivity.this, AppearanceActivity.class);
                        intent.putExtra("user_id", user.getObjectId());
                        startActivity(intent);
                    } else {
                        //Save failed
                        Log.d("", "User update error: " + e);
                    }
                }
            });
        }
    });
}
}
第二次露面活动

public class AppearanceActivity extends Activity {
protected EditText mEthnicity;
protected EditText mHeight;
protected EditText mWeight;
protected EditText mHairColor;
protected EditText mEyeColor;
protected EditText mBirthday;
protected EditText mGender;
protected Button mNextPageButtonOnAppearance;
String userId;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_appearance);

    //Receiving
    Intent intent = getIntent();
    //assigns data that was passed from previous activity.
    userId = intent.getExtras().getString("user_id");
    Log.d("Kiem", "userID is: " + userId);

    //sets variables to their respective xml elements.
    mEthnicity = (EditText)findViewById(R.id.ethnicityEditText);
    mHeight = (EditText)findViewById(R.id.heightNumberPicker);
    mWeight = (EditText)findViewById(R.id.weightEditText);
    mHairColor = (EditText)findViewById(R.id.hairEditText);
    mEyeColor = (EditText)findViewById(R.id.eyeEditText);
    mBirthday = (EditText)findViewById(R.id.birthdayDatePicker);
    mGender = (EditText)findViewById(R.id.genderEditText);
    mNextPageButtonOnAppearance = (Button)findViewById(R.id.nextPageButtonOnAppearance);

    //Listen to Next Page button to click
    mNextPageButtonOnAppearance.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            //Get ethnicity, height, weight, hair color, eye color, birthday, gender and covert them to string
            final String ethnicity = mEthnicity.getText().toString().trim();
            final String height = mHeight.getText().toString().trim();
            final String weight = mWeight.getText().toString().trim();
            final String hairColor = mHairColor.getText().toString().trim();
            final String eyeColor = mEyeColor.getText().toString().trim();
            String birthday = mBirthday.getText().toString().trim();
            final String gender = mGender.getText().toString().trim();

            ParseQuery<ParseUser> query = ParseUser.getQuery();
            query.whereEqualTo("objectId", userId);
            // Execute the query to find the object with ID
            query.getInBackground(userId, new GetCallback<ParseUser>() {
                public void done(final ParseUser user, ParseException e) {
                    if (e == null) {
                        user.put("ethnicity", ethnicity);
                        user.put("hairColor", hairColor);
                        user.put("eyeColor", eyeColor);
                        user.put("gender", gender);
                        user.put("height", height);
                        user.put("weight", weight);

                        user.saveInBackground(new SaveCallback() {
                            @Override
                            public void done(ParseException e) {
                                if(e == null){
                                    //Saved successfully
                                    //Passing user object to PinsActivity and take user to Pins register page
                                    Intent intent = new Intent(AppearanceActivity.this, PinsActivity.class);
                                    intent.putExtra("user_id", user.getObjectId());
                                    startActivity(intent);
                                } else {
                                    //Save failed
                                    Log.d("", "User update error: " + e);
                                }
                            }
                        });

                    } else {
                        //Log.d("Kiem", "Error: " + e.getMessage());
                    }
                }
            });


        }
    });

//AlertDialog with list view to select ethnicity
public void alertEthnicityListView(View view){
    final CharSequence[] ethics = {"Caucasian", "African American", "Asian", "Hispanic", "Middle-Eastern/Indian","Native American","Other"};
    AlertDialog.Builder builder = new AlertDialog.Builder(AppearanceActivity.this);
    builder.setTitle("Select your ethinicity");
    builder.setItems(ethics, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int ethic) {
            mEthnicity.setText(ethics[ethic]);
        }
    }).show();
}

//AlertDialog with list view to select hair color
public void alertHairListView(View view){
    final CharSequence[] hairs = {"Brown", "Black", "Blonde", "Red", "Strawberry-Blonde", "Dirty-Blonde", "Dyed-Pink", "Dyed-Blue", "Dyed-Green", "Dyed-Purple", "Dyed-Red"};
    AlertDialog.Builder builder = new AlertDialog.Builder(AppearanceActivity.this);
    builder.setTitle("Select your hair color");
    builder.setItems(hairs, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int hair) {
            mHairColor.setText(hairs[hair]);
        }
    }).show();
}

//AlertDialog with list view to select eye color
public void alertEyeListView(View view){
    final CharSequence[] eyes = {"Green", "Blue", "Hazel", "Brown", "Amber", "Other"};

    AlertDialog.Builder builder = new AlertDialog.Builder(AppearanceActivity.this);
    builder.setTitle("Select your eye color");
    builder.setItems(eyes, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int eye) {
            mEyeColor.setText(eyes[eye]);
        }
    }).show();
}

//AlertDialog with list view to select gender
public void alertGenderListView(View view){
    final CharSequence[] genders = {"Male", "Female"};

    AlertDialog.Builder builder = new AlertDialog.Builder(AppearanceActivity.this);
    builder.setTitle("Select your gender");
    builder.setItems(genders, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int gender) {
            mGender.setText(genders[gender]);
        }
    }).show();
}

//AlertDialog with list view to select birthday
Calendar myCalendar = Calendar.getInstance();
DatePickerDialog.OnDateSetListener date = new DatePickerDialog.OnDateSetListener() {

    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
        // TODO Auto-generated method stub
        myCalendar.set(Calendar.YEAR, year);
        myCalendar.set(Calendar.MONTH, monthOfYear);
        myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
        updateLabel();
    }

};

private void updateLabel() {
    String myFormat = "MM/dd/yy"; //In which you need put here
    SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US);
    mBirthday.setText(sdf.format(myCalendar.getTime()));
}
}
public class PinsActivity extends Activity {
protected EditText mPassword;
protected EditText mConfirmPassword;
protected Button mRegisterButton;
protected EditText mPin;
protected EditText mFakePin;
String userId;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_pins);

    //Receiving
    Intent intent = getIntent();
    //assigns data that was passed from previous activity.
    userId = intent.getExtras().getString("user_id");
    Log.d("Kiem2", "userID is: " + userId);

    //sets variables to their respective xml elements.
    mPassword = (EditText)findViewById(R.id.passwordEditText);
    mConfirmPassword = (EditText)findViewById(R.id.confirmPasswordEditText);
    mRegisterButton = (Button)findViewById(R.id.registerButton);
    mPin = (EditText)findViewById(R.id.pinEditText);
    mFakePin = (EditText)findViewById(R.id.fakePinEditText);

    //Force soft keyboard to appear for user to type in password and confirm password
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.showSoftInput(mPassword, InputMethodManager.SHOW_IMPLICIT);
    imm.showSoftInput(mConfirmPassword, InputMethodManager.SHOW_IMPLICIT);

    //Listen to Register Button to click
    mRegisterButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.d("Kiem3", "userID is: " + userId);
            signup();
        }
    });
}

private void signup(){
    //get values for password, confirm password, pin, fake pin fields and convert them to strings
    final String password = mPassword.getText().toString();
    final String confirmPassword = mConfirmPassword.getText().toString();
    final String pin = mPin.getText().toString().trim();
    final String fakePin = mFakePin.getText().toString().trim();

    Log.d("Value of fakepin ", "is: " + fakePin);

    ParseQuery<ParseUser> query = ParseUser.getQuery();
    query.whereEqualTo("objectId", userId);
    // Execute the query to find the object with ID
    query.getInBackground(userId, new GetCallback<ParseUser>() {
        public void done(final ParseUser user, ParseException e) {
            if (e == null) {
                user.put("password", password);
                user.put("pin", pin);
                user.put("fakePin", fakePin);
                user.saveInBackground(new SaveCallback() {
                    @Override
                    public void done(ParseException e) {
                        if (e == null) {
                            // Saved successfully.
                            //Passing user object to AppearanceActivity and take user to appearance register page
                            Intent intent = new Intent(PinsActivity.this, MainActivity.class);
                            intent.putExtra("user_id", user.getObjectId());
                            startActivity(intent);
                        } else {
                            // The save failed.
                            Log.d("", "User update error: " + e);
                        }
                    }
                });
                Toast.makeText(getApplicationContext(), "Success", Toast.LENGTH_LONG).show();
            } else {
                //Log.d("Kiem", "Error: " + e.getMessage());
            }
        }
    });

    //Check if password and confirm password fields are not blank and that they're matched
    boolean validationError = false;
    StringBuilder validationErrorMessage = new StringBuilder(getString(R.string.error_intro));

    if (password.length() == 0) {
        if (validationError) {
            validationErrorMessage.append(getString(R.string.error_join));
        }
        validationError = true;
        validationErrorMessage.append(getString(R.string.error_blank_password));
    }
    if (!password.equals(confirmPassword)) {
        if (validationError) {
            validationErrorMessage.append(getString(R.string.error_join));
        }
        validationError = true;
        validationErrorMessage.append(getString(R.string.error_mismatched_passwords));
    }
    validationErrorMessage.append(getString(R.string.error_end));

    //Append validationErrorMessage with the appropriate error strings as well as set validationError as errors are detected
    if (validationError) {
        Toast.makeText(PinsActivity.this, validationErrorMessage.toString(), Toast.LENGTH_LONG).show();
        return;
    }
}
}
公共类外观活动扩展活动{
受保护的编辑性;
受保护的文本重;
受保护的文本重量;
受保护的编辑文本颜色;
受保护的编辑文本颜色;
受保护的编辑文本日;
受保护的编辑文本管理器;
保护按钮MnExtPageButtonNoAppearance;
字符串用户标识;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_外观);
//接收
Intent=getIntent();
//分配从上一个活动传递的数据。
userId=intent.getExtras().getString(“用户id”);
Log.d(“Kiem”,“userID是:”+userID);
//将变量设置为其各自的xml元素。
mEthnicity=(EditText)findViewById(R.id.ethnicityEditText);
mHeight=(EditText)findViewById(R.id.heightNumberPicker);
mWeight=(EditText)findViewById(R.id.weightEditText);
mHairColor=(EditText)findViewById(R.id.hairEditText);
mEyeColor=(EditText)findViewById(R.id.eyeEditText);
mBirthday=(EditText)findViewById(R.id.birthdayDatePicker);
mGender=(EditText)findViewById(R.id.genderEditText);
MnExtPageButtonNoAppearance=(按钮)findViewById(R.id.nextPageButtonNoAppearance);
//单击“收听下一页”按钮
MnExtPageButtonNoAppearance.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//获取种族、身高、体重、头发颜色、眼睛颜色、生日、性别,并将其隐藏到字符串中
最后一个字符串=mEthnicity.getText().toString().trim();
最终字符串高度=mHeight.getText().toString().trim();
最终字符串重量=mWeight.getText().toString().trim();
最终字符串hairColor=mHairColor.getText().toString().trim();
最后一个字符串eyeColor=mEyeColor.getText().toString().trim();
String birthday=mBirthday.getText().toString().trim();
最终字符串性别=mGender.getText().toString().trim();
ParseQuery=ParseUser.getQuery();
query.whereEqualTo(“objectId”,userId);
//执行查询以查找ID为的对象
getInBackground(userId,newgetcallback(){
public void done(最终ParseUser用户,parsee异常){
如果(e==null){
用户输入(“种族”,种族);
用户输入(“hairColor”,hairColor);
用户输入(“eyeColor”,eyeColor);
user.put(“性别”,性别);
用户输入(“高度”,高度);
用户输入(“重量”,重量);
user.saveInBackground(新的SaveCallback(){
@凌驾
公共作废完成(Parsee异常){
如果(e==null){
//成功保存
//将用户对象传递给PinsActivity并将用户带到Pins注册页
意向意向=新意向(AppearanceActivity.this、PinsActivity.class);
intent.putExtra(“user_id”,user.getObjectId());
星触觉(意向);
}否则{
//保存失败
Log.d(“,”用户更新错误:“+e”);
}
}
});
}否则{
//Log.d(“Kiem”,“Error:+e.getMessage());
}
}
});
}
});
//带有列表视图的AlertDialog可选择种族
public void AlerthMinicityListView(视图){
最终字符顺序[]伦理={“高加索人”、“非裔美国人”、“亚洲人”、“西班牙人”、“中东/印度人”、“印第安人”、“其他人”};
AlertDialog.Builder=新建AlertDialog.Builder(AppearanceActivity.this);
builder.setTitle(“选择您的ethinicity”);
setItems(道德规范,新的DialogInterface.OnClickListener(){
public void onClick(对话框接口对话框,int){
mEthnicity.setText(伦理[伦理]);
}
}).show();
}
//使用列表视图选择头发颜色的AlertDialog
公共void alertHairListView(视图){
最终CharSequence[]头发={“棕色”、“黑色”、“金发”、“红色”、“草莓色金发”、“脏金发”、“染成粉红色”、“染成蓝色”、“染成绿色”、“染成紫色”、“染成红色”};
AlertDialog.Builder=新建AlertDialog.Builder(AppearanceActivity.this);
builder.setTitle(“选择您的头发颜色”);
setItems(头发,新的DialogInterface.OnClickListener(){
P