原标题:Android开源项目-小熊日记讲解【附源码】

作者

本文由bear~投稿,博客地址:http://www.apkbus.com/myspaceblog-302849.html

前言

一直是接着别人的代码来做App的,所以没有完整的开发App体验,总感觉有所缺少。于是,就利用业余时间亲自操刀开始了我的第一次开源项目。本文将讲述开源项目的整个开发过程。

项目初衷

开始这个项目的初衷是为了练习当前比较火热的框架。能够涉及到数据库存储,网络请求,图片加载等功能。于是,便以日记为主题,图文阅读为辅设计了如题的小熊日记。

项目功能

日记

趣闻

萌图

开发模式

开发模式选择MCP模式,如果你问我为什么?我不会告诉你的。

我就告诉你我使用后的一些感受吧,是用MVP代码量没有减少,但是在写代码前会思考的比较多,不用关注怎么实现。需要全局考虑功能页面有哪些功能,将所有的功能抽象出来。代码十分优雅,页面得功能能一目了然,后期维护也很方便

项目框架

网络层

volley和retrofit选择了retrofit,都是非常优秀的网络库,但是为了练习rxjava和lambda选择了retrofit虽然,retrofit的库要比volley大。

retrofit的整合

build.gradle文件:

compile'com.squareup.retrofit2:retrofit:2.2.0'

compile'com.squareup.retrofit2:converter-gson:2.2.0'

compile'com.squareup.retrofit2:retrofit-adapters:2.2.0'

compile'com.squareup.retrofit2:adapter-rxjava2:2.2.0'

compile'io.reactivex.rxjava2:rxandroid:2.0.1'

compile'io.reactivex.rxjava2:rxjava:2.0.9'

注意上面第四行的adapter-rxjava2:2.2.0中一定写上rxjava==2==,老的博客里面都是配置的是的是rxjava这里也是遇到各种坑,不写上2的话会报Unable to create call adapter for io.reactivex.Observable的异常导致闪退

AndroidManifest.xml配置步入正题,retrofit的初始化以及demo初始化retrofit,直接上代码publicclass ApiService{ //获取单例public static HttpInterface getApiService(){

returngetInstance().mHttpInterface; } //在访问HttpMethods时创建单例privatestaticclass SingletonHolder{

privatestaticfinalApiService INSTANCE = newApiService(); } private static ApiService getInstance(){

returnSingletonHolder.INSTANCE; } privateHttpInterface mHttpInterface; private ApiService(){ Retrofit retrofit = newRetrofit.Builder(). baseUrl("http://ent.sipmch.com.cn"). addConverterFactory(GsonConverterFactory.create()). addCallAdapterFactory(RxJava2CallAdapterFactory.create()). build(); mHttpInterface = retrofit.create(HttpInterface.class); }}

定义接口

publicinterfaceHttpInterface{

@FormUrlEncoded@POST("/ModuleDefaultCompany/RentManage/SearchRentNo/") Observable search(@Field("CertNo") String idNo);}

返回结果的JsonBean

publicclass RoomResult{

publicStringresult;

publicStringprompWord;}

方法调用

Apiservice.getService().search(account)

.subscribeOn(Schedulers.newThread())

.observeOn(AndroidSchedulers.mainThread())

.subscribe(roomResult -> {

Utils.showToast(mActivity,roomResult.prompWord);});

好了大功告成。

数据库

数据库选择GreenDao,库比较小,做文本储存绰绰有余。

gradle配置,外层需要全局引入GreenDao的插件:build{

repositories{ jcenter() } dependencies{

classpath'org.greenrobot:greendao-gradle-plugin:3.2.2'}}

然后在内部的gradle apply以及依赖相关的包

applyplugin: 'com.android.application'//applygreendao插件

applyplugin: 'org.greenrobot.greendao'compile'org.greenrobot:greendao:3.2.2'compile'net.zetetic:android-database-sqlcipher:3.5.1@aar'

上面compile 'net.zetetic:android-database-sqlcipher:3.5.1@aar'的导入也是在配置过程中遇到的坑后面会解释一下为什么加这一句。

greenDao配置及使用

首先在Application中初始化

publicclass MyApplication extends Application{

publicstaticMyApplication INSTANCE;

publicstaticfinalbooleanENCRYPTED = true;

privateDaoSession mDaoSession;

@Overridepublicvoid onCreate(){

super.onCreate(); INSTANCE = this; DaoMaster.DevOpenHelper help = newDaoMaster.DevOpenHelper(this, ENCRYPTED ? "bear-db-encrypted": "bear-db"); //此处有坑Database db = ENCRYPTED ? help.getEncryptedWritableDb("admin") : help.getWritableDb(); mDaoSession = newDaoMaster(db).newSession(); } publicDaoSession getDaoSession(){

returnmDaoSession; }}

下面建立一个数据表来试试,那先来个User表来试玩一下。新建UserBean class

@Entity(indexes = { //index 值是拿表中的account作为索引,且索引是唯一不可重复的@Index(value = "account",unique = true)})publicclassUserBean { //声明一个主键值@Idpubliclong id;

publicStringaccount;

publicStringpassWord;

publicStringmobile;

publicStringemail;}

建立完之后点一下Android Studio运行左边的小锤子make project后就会预编译出一个比较长的类了。

@Entity(indexes = {

@Index(value = "account",unique = true)})publicclass UserBean{

@Idpubliclongid;

publicString account;

publicString passWord;

publicString mobile;

publicString email;

@Generated(hash = 1328729131)public UserBean(long id, String account, String passWord, String mobile, String email){

this.id = id;

this.account = account;

this.passWord = passWord;

this.mobile = mobile;

this.email = email;}@Generated(hash = 1203313951)public UserBean(){}public long getId(){ returnthis.id;}public void setId(long id){ this.id = id;}public String getAccount(){ returnthis.account;}public void setAccount(String account){ this.account = account;}public String getPassWord(){ returnthis.passWord;}public void setPassWord(String passWord){ this.passWord = passWord;}public String getMobile(){ returnthis.mobile;}public void setMobile(String mobile){ this.mobile = mobile;}public String getEmail(){ returnthis.email;}public void setEmail(String email){ this.email = email;}}

Ok,表已经建立完毕,现在试着插条数据进去玩玩

UserBean userBean = new UserBean();

userBean.setId((long)1);

userBean.setAccount("18262282215");

userBean.setPassWord("111111qq");

userBean.setEmail("bear@berdatata.com");

userBean.setMobile("18262282215"); UserBeanDao dao = MyApplication.INSTANCE.getDaoSession().getUserBeanDao();

开始运行后,Crash 没错就是crash,wocao,明明是按照官网的配置一个个来的嘛。折腾几次终于发现少依赖了一个包,就是前面讲的使用加密的数据库需要导入compile 'net.zetetic:android-database-sqlcipher:3.5.1@aar'。总算是走通了。

图片加载(glide)

可以参考之前的文章:

项目数据源获取

趣闻来源

本着练习的心态,也是没有去找现有的API接口,去拉数据,于是学习了python爬去了糗百的热门段子,Node写了API接口。(注:本人只做个人练习,并不涉及商业使用)爬虫的编写,详情可点击左下角“阅读原文”查看。

图片来源

图片接口来自百度图片的接口。

运行效果图

其他

项目地址:https://github.com/MissMyDearBear/Diary

Debug 时间

Today's topic

作为一个合格的程序员一定想过给开源社区贡献自己的一行代码,那么问题来了,你有为开源社区贡献过代码么,如果贡献过的话是什么项目呢?

回答认真的有趣的,小巴士会分享出来,开启无敌脑洞吧~另外,给安卓巴士公众号后台发送“报名交友”+你的联系方式(企鹅号/微信号),经过筛选就可以得到小巴士独家专访吸引更多妹子关注,帮你早日脱单,具体详情见此篇。返回搜狐,查看更多

责任编辑:

python小熊代码_Android开源项目-小熊日记讲解【附源码】相关推荐

  1. 2021年度28个开箱即用的MQTT开源项目合集【附源码】

    随着云通讯行业持续增长,5G建设逐步推进.音视频技术快速迭代,都是为了满足人与人.设备与人.设备与设备之间的消息传输.这无疑是一个消息传输的时代.在这个时代中,所有的协议.配置都在于恰到好处.正如MQ ...

  2. python撩人的代码,老师教已毕业的学生,用Python代码每天不定时撩女友,附源码文件...

    原本就是学生会主席,在学校如此优秀的他,毕业参加工作,依然展现出好强的一面. 每天认真的工作,即使在工作之余也要用来给自己充电,所以难免会忽略女友,不够关心,免不了发脾气,甚至是争吵. 有一天,曾经大 ...

  3. python画圣诞帽_使用Python给头像加上圣诞帽或圣诞老人小图标附源码

    随着圣诞的到来,想给给自己的头像加上一顶圣诞帽.如果不是头像,就加一个圣诞老人陪伴. 用Python给头像加上圣诞帽,看了下大概也都是来自2017年大神的文章:https://zhuanlan.zhi ...

  4. html实现浪漫的爱情日记(附源码)

    文章目录 1.设计来源 1.1 主界面 1.2 遇见 1.3 相熟 1.4 相知 1.5 相念 2.效果和源码 2.1 动态效果 2.2 源代码 2.3 代码结构 源码下载 更多爱情表白源码 作者:x ...

  5. python画圣诞老人_使用Python给头像加上圣诞帽或圣诞老人小图标附源码

    随着圣诞的到来,想给给自己的头像加上一顶圣诞帽.如果不是头像,就加一个圣诞老人陪伴. 用Python给头像加上圣诞帽,看了下大概也都是来自2017年大神的文章:https://zhuanlan.zhi ...

  6. Java项目——物业管理系统(附源码+数据库)

    今天给小伙伴们分享一个Java项目--物业管理系统(附源码+数据库) 感兴趣的小伙伴可以点击下方链接和小编一起学习哟~ https://www.bilibili.com/video/BV1cD4y1s ...

  7. 【开源项目】Dynamic-Tp告警系统的源码解析

    序言 [开源项目]Dynamic-Tp核心流程源码解读,继上回解读完DynamicTp这个开源项目的源码,觉得其中的告警机制也是十分精彩,如果能学会,用在自己的项目中,那才能说得上掌握了Dynamic ...

  8. 推荐一套开源通用后台管理系统(附源码)

    今日推荐 Java 8 一行代码解决了空指针问题,太厉害了...List中remove()方法的陷阱,被坑惨了!25000 字详解 23 种设计模式,原来可以这么简单!最牛逼的 Java 日志框架,性 ...

  9. Python实现的图书分析大屏展示系统(附源码)

    今天给大家分享的是基于 Flask.Echarts.Pandas 等实现的图书分析大屏展示系统. 项目亮点 采用 pandas.numpy 进行数据分析 基于 snownlp.jieba 进行情感分析 ...

  10. 毕业设计-基于SSM框架大学教务管理平台项目开发实战教程(附源码)

    文章目录 1.项目简介 2.项目收获 3.项目技术栈 4.测试账号 5.项目部分截图 6.常见问题 毕业设计-基于SSM框架大学教务管理平台项目实战教程-附源码 课程源码下载地址:https://do ...

最新文章

  1. 【动态规划专题】数字三角形模型
  2. Nginx的配置文件nginx.conf详解
  3. SharePoint 2007 Backup Strategies
  4. GET_ROLE_BASED_PAGE_USAGES
  5. 为什么我不推荐Python初学者直接看项目源码?工作五年的程序员给的忠告
  6. 在整个数据库搜索某个字符串在哪个表的哪个字段中
  7. 图像变形功能的应用: 在线修整发型
  8. 设置返回IOS开发(26)之UITableView的页眉和页脚
  9. matlab 传递函数求截止频率,高分求解RC滤波电路的传递函数和截止频率
  10. 让你口水不停的最新台湾美食推荐
  11. springMVC_08文件上传
  12. 孩子们的游戏(圆圈中最后剩下的数)(Python)
  13. 新萝卜家园Ghost XP SP3电脑城装机版2013.08
  14. photoshop cs3 调色教程 让夏天成秋天
  15. 各种路由器接口与连接方法
  16. 【更新】Excel控件Spire.XLS for .NET V7.12.90发布 | 支持向工作表添加形状
  17. 一个应届生是怎样搞定google、微软、百度、腾讯、搜狗的
  18. SSL网站安全证书https加密防劫持
  19. Altera FPGA基本开发流程
  20. 程设大作业之魔兽世界

热门文章

  1. 【破损识别】基于matlab GUI机器视觉+SVM玉米种子破损识别【含Matlab源码 1606期】
  2. 【心电信号】基于matlab NLM时间序列心电信号去噪【含Matlab源码 1547期】
  3. 毕设题目:Matlab图像隐写
  4. 【模拟信号】基于matlab抑制载波双边带调幅信号产生+解调【含Matlab源码 985期】
  5. 【路径规划】基于matlab GUI改进的DWA算法机器人静态避障路径规划【含Matlab源码 678期】
  6. 【语音识别】基于matlab动态时间规整(DTW)孤立字语音识别【含Matlab源码 573期】
  7. canvas贝塞尔曲线爱心_HTML5 Canvas 绘制贝塞尔曲线 Bezier and quadratic curves
  8. 微信小程序下拉刷新真机没效果_微信小程序~下拉刷新真机测试不弹回的处理办法...
  9. 变异数分析_人工智能系统中分析变异的祸害
  10. gan loss gan_我的GAN怎么了?