开源App之MyHearts(二)

开源App之MyHearts(二)

前言

小弟技术有限,有的地方也是自己摸索出来的,可能和大神们写的好的代码没法比,但是我会努力的。要对自己说下,加油!!

此次更新

1、集成QQ登录完成

集成QQ登录网上写的介绍已经很多了,这里就不详细介绍,就写下自己遇到的坑。

  //QQ的初始化
        mTencent = Tencent.createInstance("app_id(申请的)", this.getApplicationContext());
        mInfo = new UserInfo(this, mTencent.getQQToken());

在点击登录按钮调用以下代码:

  mTencent.login(this, "all", loginListener);

    IUiListener loginListener = new BaseUiListener() {
        @Override
        protected void doComplete(JSONObject values) {
            Log.d(TAG, "ruolanmingyue:" + values);
            Log.d("SDKQQAgentPref", "AuthorSwitch_SDK:" + SystemClock.elapsedRealtime());
            initOpenidAndToken(values);

            //下面的这个必须放到这个地方,要不然就会出错   哎,,,,,调整了近一个小时,,,,我是服我自己了
            updateUserInfo();
        }
    };


    public static void initOpenidAndToken(JSONObject jsonObject) {
        try {
            String token = jsonObject.getString(Constants.PARAM_ACCESS_TOKEN);
            String expires = jsonObject.getString(Constants.PARAM_EXPIRES_IN);
            String openId = jsonObject.getString(Constants.PARAM_OPEN_ID);
            if (!TextUtils.isEmpty(token) && !TextUtils.isEmpty(expires)
                    && !TextUtils.isEmpty(openId)) {
                mTencent.setAccessToken(token, expires);
                mTencent.setOpenId(openId);
            }
        } catch (Exception e) {
        }
    }

    private class BaseUiListener implements IUiListener {

        @Override
        public void onComplete(Object response) {
            if (null == response) {
                Util.showResultDialog(LoginActivity.this, "返回为空", "登录失败");
                return;
            }
            JSONObject jsonResponse = (JSONObject) response;
            if (null != jsonResponse && jsonResponse.length() == 0) {
                Util.showResultDialog(LoginActivity.this, "返回为空", "登录失败");
                return;
            }
            doComplete((JSONObject) response);
        }

        @Override
        public void onError(UiError e) {
            Util.toastMessage(LoginActivity.this, "onError: " + e.errorDetail);

        }

        @Override
        public void onCancel() {
            Util.toastMessage(LoginActivity.this, "onCancel: ");

        }

        protected void doComplete(JSONObject values) {

        }
    }

以上就能够吊起QQ客户端登录,然后获取用户信息(具体可以查看demo,最后会贴上地址的,不要急哈)

2、注册登录实现(利用Bmob作为后台,mob的短信验证)

在这里,mob的短信验证集成就不多说了,他们官方的demo也是比较详细的,代码量也比较多,贴在这里不雅,还不如直接git呢,哈哈,是不。
注册,我这里使用的是Bmob后台管理,详情可以查看,这里看下代码,应该是很好理解的。

 /**
     * 进行注册
     */
    private void doRegister() {
        String userName = mEditName.getText().toString().trim();
        final MyUser myUser = new MyUser();
        if (RegularUtils.isUsername(userName)) {
            myUser.setUsername(userName);
            myUser.setPassword(pwd);
            myUser.setMobilePhoneNumber(phone);
            addSubscription(myUser.signUp(new SaveListener<MyUser>() {
                @Override
                public void done(MyUser myUser, BmobException e) {
                    if (e == null) {
                        Toast.makeText(RegisterSecondActivity.this, "注册成功", Toast.LENGTH_SHORT).show();
                        PreferencesUtils.putString(RegisterSecondActivity.this,Contants.USER_NAME,userName);
                        PreferencesUtils.putString(RegisterSecondActivity.this,Contants.USER_PASSWORD,pwd);
                        startActivity(new Intent(RegisterSecondActivity.this, LoginActivity.class));
                    } else {
                        //注册失败
                    }
                }
            }));
        }
    }
3、用户详情界面

用户详情界面,除了UI界面代码比较多,逻辑还是挺简单的,就是获取到当前用户。

每当你应用的用户注册成功或是第一次登录成功,都会在本地磁盘中有一个缓存的用户对象,这样,你可以通过获取这个缓存的用户对象来进行登录:
mCurrentUser = MyUser.getCurrentUser(MyUser.class);

然后就是根据这个用户对象,获取你需要展示的逻辑了。
这里就不多说,代码还是直接取git,down下来运行,会受益颇多,git界面最后又怎么导入项目的指导。

4、更新用户信息界面

对于更新用户界面,在这里,字段定义的比较多。大家可以看下。

  private Integer age;  //年龄
    private Integer num;  //
    private Boolean sex;  //性别

    private String imgurl;  //图片地址
    private String instance;  //地址
    private String profession;  //职业
    private String bloodtype;  //血型
    private String love;  //爱好
    private String des;  //描述
    private int userfans;  //fans数量
    private String constellation;  //星座
    private String label;  //标签

当然,对于用户名,密码,是在他的父类中进行了定义,(MyUser这个类要继承与BmobUser才能使用的哈)
对于年龄、性别这里使用了第三方弹框。项目地址
compile 'cn.qqtheme.framework:WheelPicker:1.1.2'
职业采用的第三方,依赖地址:

compile 'com.afollestad.material-dialogs:commons:0.9.0.2'

再次再次感谢此次用到的开源的项目的作者,没有他们的开源,也不会有这个MyHearts开源。
当获取到所有的已经编辑好的用户信息的时候,调用以下代码就可以完成更新

 String objectId = mCurrentUser.getObjectId();
 
  user.update(objectId, new UpdateListener() {
            @Override
            public void done(BmobException e) {
                if (e == null) {
                    CustomPrograss.disMiss();
                }
            }
        });

对于更新用户头像,可以查看下我之前的一个圆形图片,里面有启用相册或者相机的https://github.com/wuyinlei/CircleImgae
这里更新用户头像,使用的是Bmob的另一个类。BmobFile,这里看下代码

            //头像本地地址
            final BmobFile bmobFile = new BmobFile(new File(path));
            //
            bmobFile.uploadblock(new UploadFileListener() {

                @Override
                public void done(BmobException e) {
                    if (e == null) {
                        Toast.makeText(UserActivity.this, "pic is success", Toast.LENGTH_SHORT).show();
                        // MyUser myUser =MyUser.getCurrentUser(MyUser.class);
                        //得到上传的图片地址
                        String fileUrl = bmobFile.getFileUrl();
                        mCurrentUser.setImgurl(fileUrl);
                        //更新图片地址
                        mCurrentUser.update(mCurrentUser.getObjectId(), new UpdateListener() {
                            @Override
                            public void done(BmobException e) {
                                if (e == null) {
                                    Toast.makeText(UserActivity.this, "update", Toast.LENGTH_SHORT).show();

                                }
                            }
                        });
                    }
                }
            });

在这里有个比较重要的,本来用户城市,想要整一个三级联动,但是,想着是不是可以尝试以下,选择城市的那种,右侧有侧边栏的指引的,然后就实现了,不过在前期数据库写入本地的时候,出现了一些问题,造成写入,找不到数据库文件。还好最后解决了。代码过多,就不贴了。还是那一句话,down代码,自己运行,这样看着代码,运行着程序,如有不明白的自己调试,也可以和我交流。虽然这更新的不是挺多,但是代码量还是挺可观的(。。。。)

看下最近更新的功能吧,图形应该比较直观




代码传送门

https://github.com/wuyinlei/MyHearts

写在最后

基本上,本项目也就差不多了,其他的除了(即时通讯、直播),其他的页面逻辑都差不多,即时通讯,接下来就是自己学习的一个重点了,等学好了,有时间就会在次app基础上进行增加功能。直播也在以后接触之后,会慢慢更新。这也算是对自己的一个小总结,也是接下来重大任务的起始点。加油。如果有任何疑问,都可以进行交流。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容