开源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/924587628/MyHearts.git
写在最后
基本上,本项目也就差不多了,其他的除了(即时通讯、直播),其他的页面逻辑都差不多,即时通讯,接下来就是自己学习的一个重点了,等学好了,有时间就会在次app基础上进行增加功能。直播也在以后接触之后,会慢慢更新。这也算是对自己的一个小总结,也是接下来重大任务的起始点。加油。如果有任何疑问,都可以进行交流。
开源App之MyHearts(二)的更多相关文章
- 开源app之MyHearts
前言 这个月,说实话,有忙有闲,经历了一次病痛的洗礼,才认识到了只有好好的生活,认真的对待自己的身体,才能更好的去工作,没有了身体的支撑,什么工作都只能是纸老虎,不攻自破.在这里也祝愿大家,在生活中好 ...
- React Native指南汇集了各类react-native学习资源、开源App和组件
来自:https://github.com/ele828/react-native-guide React Native指南汇集了各类react-native学习资源.开源App和组件 React-N ...
- 越折腾越好用的 3 款开源 APP
高中的时候我特别喜欢捣鼓手机,然后我一个哥们儿在我的强烈推荐下买了个 HTC Dream(G1) 手机. G1 作为谷歌的第一个亲儿子,它出厂搭载的是 Android 1.5 系统,但当时已经出到了 ...
- Android APP压力测试(二)之Monkey信息自动收集脚本
Android APP压力测试(二) 之Monkey信息自动收集脚本 前言: 上一篇Monkey介绍基本搬抄官方介绍,主要是为了自己查阅方便.本文重点介绍我在进行Monkey时如何自动收集相关信息 ...
- 学习Coding-iOS开源项目日志(二)
继续前篇:<学习Coding-iOS开源项目日志(一)>,接着本第二篇<学习Coding-iOS开源项目日志(二)>讲解Coding-iOS开源项目. 前言:作为初级程序员,想 ...
- 基于Html5 Plus + Vue + Mui 移动App 开发(二)
基于Html5 Plus + Vue + Mui 移动App 开发(二) 界面效果: 本页面采用Html5 Plus + Vue + Mui 开发移动界面,本页面实现: 1.下拉刷新.上拉获取更多功能 ...
- 带你从零学ReactNative开发跨平台App开发(二)
ReactNative跨平台开发系列教程: 带你从零学ReactNative开发跨平台App开发(一) 带你从零学ReactNative开发跨平台App开发(二) 带你从零学ReactNative开发 ...
- 开源APP 源码
作者:wjh2005链接:http://www.zhihu.com/question/28518265/answer/88750562来源:知乎著作权归作者所有,转载请联系作者获得授权. 1. Cod ...
- 关于APP上架制作二维码相关
1.安卓版本APP上架并生成二维码问题:安卓版本上架国内市场,这个情况比较复杂一些,比如百度,网址是以上传APP生成的一个编号来进行的,每次升级更新后都发生了变化,也就相当于每次升级后网址发生改变(比 ...
随机推荐
- 自适应label的高度
iOS7以下的系统可使用方法 //获得当前cell高度 CGRect frame = [self frame]; //文本赋值 self.introduction.text = text; //设置l ...
- git vs svn
http://www.tuicool.com/articles/e2MnAb Git与SVN的不同之处 svn为集中化的版本控制,svn获取最新的版本或者提交更新,历史记录等信息每次都要连接中央版本库 ...
- 在php中需要用到的mysql数据库的简单操作
1.数据库连接 1.1用windows命令行链接数据库服务器 几个DOS命令 在DOS环境下命令后面没有分号,在MySQL环境下,命令后面有分号 进入盘符: 语法:盘符: 进入盘符下的某个文件夹 语法 ...
- 【LeetCode OJ】Linked List Cycle II
Problem link: http://oj.leetcode.com/problems/linked-list-cycle-ii/ The solution has two step: Detec ...
- Helo command rejected: need fully-qualified hostname
Helo command rejected: need fully-qualified hostname问题 是由于postfix的配置文件(main.cf)有问题.其中有一个smtpd_sasl_l ...
- Android RecyclerView添加Header头部
Android RecyclerView添加Header头部 Android RecyclerView不像以前的ListView那样直接添加头部,如果要给RecyclerView增加头部,则需要 ...
- dll强签名的由来和作用
C# dll强签名介绍 之前基本没有这个概念,直到有一天我们的dll被反编译了,导致我们的代码基本上被看到了,才想起来要保护dll的安全性,因为C#语言的在编译过程中会产生中间语言导致dll很容易被反 ...
- 使用Mysqldump 备份数据库
使用Mysqldump 备份数据库 1.备份一个数据库 mysqldump --user [user name] --password=[password] [database name] > ...
- magento关于站点搬家,换空间
1,先把原来空间的文件全部压缩后(有些不要的就不要压缩)下载下来,然后传到新空间去,注意下载下来后核对一下是否大小一样,建议使用ftp工具下载, 2,同样把原来空间的数据库打包下来,再在新空间创建一个 ...
- libvirtError: no connection driver available for qemu:///system 解决办法
今天部署了一套K版的OpenStack环境后,启动nova-compute后,日志里狂报如下错误(因为其内部有定时任务需要去连libvirtd进程): 2015-08-14 10:01:00.061 ...