将照片上传到 ParseUser 对象时,它被保存到我添加的上一个用户

When uploading a photo to the ParseUser object, it's being saved to the previous user I added

我正在使用 Parse 将我的数据从我的移动应用程序保存在 Sign-Up 页面中。 我的对象中有一个类型为 "file" 的字段,名为 "photo",它从相机或 phone.

的图库中获取图像

我的对象名为 'User'(已经存在 - ParseUser-,我刚刚添加了新字段): 下面代码的问题是 图像被保存到我添加 user.getCurrentUser().put() 的前一个用户,当我只使用 user.put() ,我无法保存任何数据,我看到 toast 表示“发生错误”。


这是我试图保存所有数据的方式:

ParseUser user = new ParseUser();
        ParseFile file = null;

        user.setPassword(password);
        user.setEmail(email);
        user.setUsername(username);

        user.put("gender", gender);
        user.put("age_category", age);
        user.put("admin", false);
        user.put("premium", false);
        user.put("about_me", about);
        user.put("reward", 0);

        if (flag_photo) {
            file = new ParseFile("profile_pic.jpg", image);

            user.put("photo", file);
            user.saveInBackground();
            //user.getParseUser(String.valueOf(user)).saveInBackground();
        }

        user.signUpInBackground(new SignUpCallback() {
            public void done(ParseException e) {
                if (e == null) {
                    // Hooray! Let them use the app now.
                    Intent intent = new Intent(SignUpActivity.this, LoginActivity.class);
                    startActivity(intent);
                    overridePendingTransition(R.anim.push_down_in, R.anim.push_down_out);

                    finish();
                }
                else {
                    int duration = Toast.LENGTH_LONG;
                    Toast.makeText(SignUpActivity.this, "An error occurred. Please try again!", duration).show();
                    // Sign up didn't succeed. Look at the ParseException
                    // to figure out what went wrong
                }
            }
        });
    }

首先,您在创建新用户时不应使用 user.saveInBackground。 Parse 文档明确表示 'Note that we used the signUpInBackground method, not the saveInBackground method. New ParseUsers should always be created using the signUpInBackground (or signUp) method. Subsequent updates to a user can be done by calling save.'

其次,您没有在代码中指定图像变量的类型,但是我假设它被称为图像,它将是一个位图等。我相信解析在尝试时需要一个字节[]创建一个文件。如果您需要将位图转换为 byte[],我建议您查看此线程:Converting bitmap to byteArray android

第三,您的问题不是将其保存给了错误的用户。它是您在将文件添加到用户之前没有保存文件。

file = new ParseFile("profile_pic.jpg", image);

file.saveInBackground(new SaveCallback() {
   public void done(ParseException e) {
       // If successful add file to user and signUpInBackground
   }
});

希望对您有所帮助!