您现在的位置: 主页 > 嵌入式操作系统 > Android > Android开源项目-小熊日记讲解【附源码】
本文所属标签:
为本文创立个标签吧:

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

来源:android 网络用户发布,如有版权联系网管删除 2018-09-09 

 点击上方“蓝字”订阅,查看更多文章


作者


        本文由 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配置

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

步入正题,retrofit的初始化以及demo

        初始化retrofit,直接上代码

public class ApiService {    //获取单例
    public static HttpInterface getApiService() {        
       return getInstance().mHttpInterface;    }    //在访问HttpMethods时创建单例    private static class SingletonHolder {        
       private static final ApiService INSTANCE = new ApiService();    }    private static ApiService getInstance(){        
           return SingletonHolder.INSTANCE;    }    private HttpInterface mHttpInterface;    private ApiService() {        Retrofit retrofit = new Retrofit.Builder().                baseUrl("http://ent.sipmch.com.cn").                addConverterFactory(GsonConverterFactory.create()).                addCallAdapterFactory(RxJava2CallAdapterFactory.create()).                build();        mHttpInterface = retrofit.create(HttpInterface.class);    } }

        定义接口

public interface HttpInterface {    
   @FormUrlEncoded    @POST("/ModuleDefaultCompany/RentManage/SearchRentNo/")    Observable<RoomResult> search(@Field("CertNo") String idNo); }

        返回结果的JsonBean

public class RoomResult {    
   public String result;    
   public String prompWord; }

        方法调用

Apiservice.getService().search(account)                            
.subscribeOn(Schedulers.newThread())                            
.observeOn(AndroidSchedulers.mainThread())                            
.subscribe(roomResult -> {                                
  Utils.showToast(mActivity,roomResult.prompWord); });

        好了大功告成。

数据库

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

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

buildscript {    
repositories {        jcenter()    }    dependencies {        
           classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'    } }

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

apply plugin: 'com.android.application'//applygreendao插件
apply plugin: '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中初始化

public class MyApplication extends Application {    
   public static MyApplication INSTANCE;    
   public static final boolean ENCRYPTED = true;    
   private DaoSession mDaoSession;    
   @Override    public void onCreate() {        
       super.onCreate();        INSTANCE = this;        DaoMaster.DevOpenHelper help = new DaoMaster.DevOpenHelper(this, ENCRYPTED ? "bear-db-encrypted" : "bear-db");        //此处有坑        Database db = ENCRYPTED ? help.getEncryptedWritableDb("admin") : help.getWritableDb();        mDaoSession = new DaoMaster(db).newSession();    }    public DaoSession getDaoSession() {        
       return mDaoSession;    } }

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

@Entity(indexes = {        //index 值是拿表中的account作为索引,且索引是唯一不可重复的
        @Index(value = "account",unique = true)
})public class UserBean {    //声明一个主键值
    @Id
    public long id;    
   public String account;    
   public String passWord;    
   public String mobile;    
   public String email; }

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

@Entity(indexes = {        
@Index(value = "account",unique = true) })public class UserBean {    
   @Id    public long id;    
   public String account;    
   public String passWord;  
    public String mobile;    
    public String 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() {    return this.id; }public void setId(long id) {    this.id = id; }public String getAccount() {    return this.account; }public void setAccount(String account) {    this.account = account; }public String getPassWord() {    return this.passWord; }public void setPassWord(String passWord) {    this.passWord = passWord; }public String getMobile() {    return this.mobile; }public void setMobile(String mobile) {    this.mobile = mobile; }public String getEmail() {    return this.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)

        可以参考之前的文章:路边跌倒的老太太我都不服,图片加载我只服Glide


项目数据源获取


趣闻来源

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


图片来源

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


运行效果图


其他

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




Debug 时间

















Today's topic

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



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

点击下方“阅读原文”查看全部内容


              查看评论 回复



嵌入式交流网主页 > 嵌入式操作系统 > Android > Android开源项目-小熊日记讲解【附源码】
 项目 功能 代码

"Android开源项目-小熊日记讲解【附源码】"的相关文章

网站地图

围观()