in my Android app I have 3 activities for user to fill in their profile and sign up:
I was able to pass the ParseUser object and save user's inputs in 1st activity and 2nd activity on Parse. However, in 3rd activity I couldn't save the Pin numbers and password on Parse. I used Log.d to check userID and it's the same for all 3 activities, also the Pins and password fields all have values. I just don't understand why I can't use saveInBackground from ParseUser object to save Pins and password in the last activity. I wonder if any expert could help me with this. Thank you very much.
1st Register Activity: public class RegisterActivity extends Activity {
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);
}
}
});
}
});
}
}
2nd AppearanceActivity
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()));
}
}
3rd PinsActivity
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;
}
}
}
I solved the problem by passing data using bundle then upload data to Parse at the last activity. Thanks guy.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With