Android - ParseObject ID为空
任何人都可以请帮我解决这个问题。我有2个活动供用户注册他们的个人资料。我创建了一个ParseObject用户,然后将此用户对象传递给第二个活动。我使用user.getObjectId()来获取用户对象的ID,但ID始终为空。我想知道是否有人能帮我找到ParseObject的用户ID。请参阅下面的代码。谢谢Android - ParseObject ID为空
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, "XXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXX");
//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();
ParseObject user = new ParseObject("User");
//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);
user.saveInBackground();
//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);
}
});
}
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 ParseObject user = new ParseObject("User");
//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);
user.saveInBackground(new SaveCallback() {
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 {
// The save failed.
Log.d("", "User update error: " + e);
}
}
});
感谢@Hades您的解决方案效果超棒:) – 2015-02-19 14:52:33
我不知道肯定这是否会解决您的问题,但我认为你需要使用ParseUser
与用户,而不是ParseObject
工作。
先用解析工作时,一些一般性意见:
Parse.initialize(this, "XXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXX");
应该在你的Application
没有一个Activity
实例的OnCreate钩发生。
ParseObject#saveInBackground是异步的。因此它呈现等待objectId更新无用。 您可以为保存呼叫提供回叫功能,保存完成后会调用该功能!
尽管如此我敢肯定你想注册用户(因为RegisterActivity的名称表示),那么你为什么不干脆用这个例子:
ParseUser user = new ParseUser();
user.setUsername("my name");
user.setPassword("my pass");
user.setEmail("[email protected]");
// other fields can be set just like with ParseObject
user.put("phone", "650-253-0000");
user.signUpInBackground(new SignUpCallback() {
public void done(ParseException e) {
if (e == null) {
// Hooray! Let them use the app now.
} else {
// Sign up didn't succeed. Look at the ParseException
// to figure out what went wrong
}
}
});
也请在开始编码之前,请务必阅读the official docs。 尤其对于您的用例,您可能会发现this有用!
感谢@throws_exceptions_at_you。我喜欢你的昵称:)我阅读官方文档,但我的应用程序有不同的设计。我的应用程序有3个活动供用户在将数据发送给Parse之前填写其个人资料信息,而不是仅使用1个活动来注册用户。这需要我在不同的活动之间传递用户对象。 – 2015-02-19 03:36:37
谢谢。你应该尽可能使用碎片。这会照顾你的问题。 – 2015-02-19 13:04:26
看看我的回答 – Hades 2015-02-18 02:12:31
感谢@Hades您的解决方案的伟大工程:) – 2015-02-19 14:56:28