关于Bmob云更新用户信息遇到的一个坑

这个问题,困扰了我几天,我曾一时苦苦无助.
眼看项目就到最后关头了,遇上这种难以解决的bug,几乎都快放弃.大不了就自己写个后端嘛,反正自己也搞过一段时间的后端,也完成了一个项目.不过都快要做完了,又另辟蹊径,这不符合我的性格.
所以我决定还是继续.
我又开了一个新的项目Project,就针对 用户更新这块 探索一下,看有没有新的发现.最终证实我的想法, 还是有的.
首先简单介绍问题的背景: 很简单,就是 用户个人信息的修改.比如更改用户名性别,年级等.本来还好好的,但是当做完修改用户名时, 结果用户名没有修改就提交了.导致后面更改任何信息都提示:

username ''xxxx" already taken,202

我真的试过很多办法, 比如修改 Bmob data sdk版本,但还是无效.这个错误一直霸屏几天.问了官方人员,但于事无补.

今天晚上,我就做了如下工作:
抽出来一些代码,自己调试.
首先要登录上去:

/**
     * 用户登录,通过账号密码
     * @param username
     * @param passwd
     */
    public void signIn(String username, String passwd){
        User user = new User();
        user.setUsername(username);
        user.setPassword(passwd);
        user.login(new SaveListener<User>() {
            @Override
            public void done(User user, BmobException e) {
                if(e == null){
                    listener.LoginSuccess();
                }else{
                    listener.LoginFailed(e);
                }
            }
        });
    }

然后弄了一个简单的按钮,当点击按钮时就 登录/修改用户信息.
登录成功后(以账号123登录),打印用户信息:

----user name---123---user sex----null----user mobile---18666551735-----user- grade----null

user.class

private String avatar;
    private Grade grade;
    private Sex  sex;
    private String sign;
    private Address address;
    private String nickname;

然后我试着更新:

				user.setSign("1231312");
                user.setUsername("123");
                user.setAddress(null);
                user.setGrade(null);
                user.setSex(null);
                user.update(new UpdateListener() {
                    @Override
                    public void done(BmobException e) {
                        if(e == null){
                            Toast.makeText(MainActivity.this,"修改成功",Toast.LENGTH_SHORT).show();
                        }else{
                            Log.d(TAG,"-----------UpdateListener-------------"+e.getMessage()+e.getErrorCode());
                        }
                    }
                });

注意这时我setUsername依然是原来的用户名,这时提示用户名已存在.
这时我意识到,一次setusername,就已经更改了本地缓存用户对象了.当然其它的set属性也是如此.
在这里插入图片描述

----user name---123---user sex----null----user mobile---18666551735-----user- grade----null------user sign------你好啊
----user name---1234---user sex----null----user mobile---18666551735-----user- grade----null------user sign------你好啊
-----------UpdateListener-------------username '1234' already taken.202

出现上面的错误,操作是这样的:
(1)首先bmob云的用户名是123,本地的也是123.
(2)这是我把setusename(“1234”),更改成功,Bmob云的用户名改为1234,本地的当然也是1234.
(3)第二次还是setusername(“1234”),则提示username ‘1234’,already taken.

然后就出现一个状态: 你想更改任何信息都不行!

这时要想更改其它信息,只要 先setUsername(null),就没有问题了.
所以最好是 不要出现setusername 的用户名和Bmob云上的一样!
否则以后更改任何信息都不行.
当然出现了这个情况,可以使用setusername(null).表示提交更新的用户的用户名未更改.然后其他地方调用update就不会报错了.

总算是解决了

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

涛歌依旧fly

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值