前言
小弟技术有限,有的地方也是自己摸索出来的,可能和大神们写的好的代码没法比,但是我会努力的。要对自己说下,加油!!
此次更新
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代码,自己运行,这样看着代码,运行着程序,如有不明白的自己调试,也可以和我交流。虽然这更新的不是挺多,但是代码量还是挺可观的(。。。。)
看下最近更新的功能吧,图形应该比较直观
写在最后
基本上,本项目也就差不多了,其他的除了(即时通讯、直播),其他的页面逻辑都差不多,即时通讯,接下来就是自己学习的一个重点了,等学好了,有时间就会在次app基础上进行增加功能。直播也在以后接触之后,会慢慢更新。这也算是对自己的一个小总结,也是接下来重大任务的起始点。加油。如果有任何疑问,都可以进行交流。
共同学习,写下你的评论
评论加载中...
作者其他优质文章