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

时间:2015-12-28 07:32:12

标签: android parse-platform storing-data

我在更新名为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();
                    }

            }
        });

我想更新我输入的电子邮件ID和应用程序UniqueID。但是由于我的代码,它创建了一个新行,而不是更新现有行。我的代码中缺少什么/错误?

以下是我在解析网站上获得的截图,如果同一个人重新安装该应用,每次添加新行

enter image description here

2 个答案:

答案 0 :(得分:0)

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

此外,saveInBackground()不保证此刻保存您的对象(即使启用了互联网连接)。如果要在将对象保存到数据库后找到它,则应使用save()方法。

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

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.getFirstInBackground(new GetCallback<ParseObject>() {
        public void done(ParseObject object, ParseException e) {
            if (e == null) {
                // Now let's update it with some new data.

                object.put("EmailID",emailID);
                object.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();
            }

        }
});

另请注意:如果您只使用androidId和电子邮件(如果默认的手机认证电子邮件帐户没有问题),您应该小心验证没有密码的用户。购买某人手机的人可以登录您的申请。

答案 1 :(得分:0)

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

第1步。

当用户登录时,存储Comman Class用户对象。喜欢..

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()
            }
        }
    });

现在用户已在您的应用程序中成功登录。 现在你想在登录申请后更新他的价值

第2步。

// 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
            }

        }
    });