如果用户重新安装应用程序或再次打开应用程序,如何使用android平台更新parse.com中的行

如果用户重新安装应用程序或再次打开应用程序,如何使用android平台更新parse.com中的行,android,parse-platform,storing-data,Android,Parse Platform,Storing Data,我在名为parse.com的云存储站点中更新每行值时遇到问题。我只是一个使用parse.com的新手。我已经阅读了有关它的文档并理解了它,但是我想做的与这里的示例有点不同。这是我的密码 请告诉我,如果现有用户再次安装应用程序,我更新该用户的错误之处 我的代码是: ParseObject mayank = new ParseObject("Mayank"); mayank.put("UniqueId",androidId); mayank.put("EmailID",emailID

我在名为parse.com的云存储站点中更新每行值时遇到问题。我只是一个使用parse.com的新手。我已经阅读了有关它的文档并理解了它,但是我想做的与这里的示例有点不同。这是我的密码

请告诉我,如果现有用户再次安装应用程序,我更新该用户的错误之处

我的代码是:

ParseObject mayank = new ParseObject("Mayank");
mayank.put("UniqueId",androidId);
        mayank.put("EmailID",emailID);
        mayank.save();

ParseQuery<ParseObject> query = ParseQuery.getQuery("Mayank");
query.whereEqualTo("UniqueId",androidId);
query.whereEqualTo("EmailID",emailID);
query.getInBackground(mayank.getObjectId(), new GetCallback<ParseObject>() {
            public void done(final ParseObject mayank, ParseException e) {
                if (e == null) {
                    // Now let's update it with some new data.

                    mayank.put("EmailID",emailID);
                        mayank.saveInBackground(new SaveCallback() {
                            @Override
                            public void done(ParseException e) {
                                if (e == null) {
                                    // Saved successfully.
                                    Toast.makeText(getApplicationContext(), "Saved", Toast.LENGTH_SHORT).show();
                                } else {
                                    // The save failed.
                                    Toast.makeText(getApplicationContext(), "Failed to Save", Toast.LENGTH_SHORT).show();
                                    Log.d(getClass().getSimpleName(), "User update error: " + e);
                                }
                            }
                        });
                    } else {
                        e.printStackTrace();
                    }

            }
        });
ParseObject-mayank=新的ParseObject(“mayank”);
mayank.put(“UniqueId”,android);
mayank.put(“EmailID”,EmailID);
mayank.save();
ParseQuery=ParseQuery.getQuery(“Mayank”);
查询:whereEqualTo(“UniqueId”,android);
查询。whereEqualTo(“EmailID”,EmailID);
query.getInBackground(mayank.getObjectId(),new GetCallback()){
公共无效完成(最终ParseObject mayank,ParseException e){
如果(e==null){
//现在让我们用一些新数据来更新它。
mayank.put(“EmailID”,EmailID);
mayank.saveInBackground(新的SaveCallback(){
@凌驾
公共作废完成(Parsee异常){
如果(e==null){
//保存成功。
Toast.makeText(getApplicationContext(),“已保存”,Toast.LENGTH_SHORT.show();
}否则{
//保存失败。
Toast.makeText(getApplicationContext(),“保存失败”,Toast.LENGTH_SHORT.show();
Log.d(getClass().getSimpleName(),“用户更新错误:”+e);
}
}
});
}否则{
e、 printStackTrace();
}
}
});
我想更新我输入的电子邮件Id和应用程序唯一Id。但由于我的代码,它创建了一个新行,而不是更新现有行。我的代码中有什么不足/错误

下面是我在解析网站上看到的屏幕截图,如果同一个人重新安装应用程序,每次添加新行时都会看到


您应该首先编写一个查询,从Parse DB获取对象,然后对其进行更改并保存它。问题是您的
mayank
对象没有其
objectId

另外,
saveInBackground()
不能保证此时保存对象(即使internet连接已打开)。如果您想在将对象保存到数据库后找到它,应该使用
save()
方法

使用
save()
更改第一个
saveInBackground()

ParseObject-mayank=新的ParseObject(“mayank”);
mayank.put(“UniqueId”,android);
mayank.put(“EmailID”,EmailID);
mayank.save();
ParseQuery=ParseQuery.getQuery(“Mayank”);
查询:whereEqualTo(“UniqueId”,android);
查询。whereEqualTo(“EmailID”,EmailID);
getFirstInBackground(新的GetCallback(){
公共无效完成(ParseObject对象,parsee异常){
如果(e==null){
//现在让我们用一些新数据来更新它。
object.put(“EmailID”,EmailID);
saveInBackground(新的SaveCallback(){
@凌驾
公共作废完成(Parsee异常){
如果(e==null){
//保存成功。
Toast.makeText(getApplicationContext(),“已保存”,Toast.LENGTH_SHORT.show();
}否则{
//保存失败。
Toast.makeText(getApplicationContext(),“保存失败”,Toast.LENGTH_SHORT.show();
Log.d(getClass().getSimpleName(),“用户更新错误:”+e);
}
}
});
}否则{
e、 printStackTrace();
}
}
});


另外请注意:如果您只使用Android和电子邮件(如果使用默认的mobilephone认证电子邮件帐户,则不会有问题),那么在没有密码的情况下对用户进行身份验证时应小心。购买了某人手机的人可以登录您的应用程序。

Ohh更新用户数据的方法非常简单,就像这样,一步一步地遵循代码风格

第1步。

// after user login u want to update his profile ..
    CommanClass.ParseObject_USER.put("EmailID", "test@gmail.com");

    CommanClass.ParseObject_USER.saveInBackground(new SaveCallback() {

        @Override
        public void done(ParseException e) {
            // TODO Auto-generated method stub
            if (e == null) {
                // success

            } else {
                // fail
            }

        }
    });
当用户登录时,需要存储Comman类用户对象。如

ParseQuery<ParseObject> login = new ParseQuery<ParseObject>("Mayank");
    login.whereEqualTo("UniqueId", "yrandroidkey");
    login.whereEqualTo("EmailID", emailID);

    login.getFirstInBackground(new GetCallback<ParseObject>() {

        @Override
        public void done(ParseObject userobject, ParseException e) {
            // TODO Auto-generated method stub
            if (e == null) {
                // Success
                // here store your user object as ParseObject in static
                // class
                // here i have store in comman class parseobject_user static
                // obj
                CommanClass.ParseObject_USER = userobject;
            } else {
                // Fail// e.getMessage()
            }
        }
    });

你能不能给我一段代码,这样我就可以更新我的代码了。我不明白你在说什么。请更正我的密码。谢谢你应该告诉我你想更新哪一行。您应该知道行的唯一数据,例如用户名,nick或objectId?我正在保存用户的唯一ID和电子邮件ID,但当用户重新安装应用程序时,会再次添加具有相同信息的新行,但如果用户相同,则会更新该行,而不会添加该行;如果用户不同,则会添加新行。代码列表是否正确,或者是否需要进行任何更正??似乎正确,只需在更新时添加“this”,并使用save在后台更改第一个save。欢迎使用堆栈溢出。我已经解决了你帖子中的英语问题。我也删除了感谢,这是没有必要的。如果你喜欢这些答复,你可以投票赞成。好的,先生,谢谢你的建议
// after user login u want to update his profile ..
    CommanClass.ParseObject_USER.put("EmailID", "test@gmail.com");

    CommanClass.ParseObject_USER.saveInBackground(new SaveCallback() {

        @Override
        public void done(ParseException e) {
            // TODO Auto-generated method stub
            if (e == null) {
                // success

            } else {
                // fail
            }

        }
    });