GreenDao+Fresco

本文介绍了一个Android应用的具体实现过程,包括使用ButterKnife进行视图绑定、GreenDao进行数据库操作、OkHttp进行网络请求等技术要点,并展示了如何通过Fresco进行图片加载优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

依赖

implementation 'com.jakewharton:butterknife:8.8.1'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
    implementation 'org.greenrobot:greendao:3.2.2'
    // add library
    implementation 'com.squareup.okhttp3:okhttp:3.11.0'
    implementation 'com.google.code.gson:gson:2.2.4'
    implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.30'
    implementation 'com.facebook.fresco:fresco:1.10.0'
    implementation 'com.android.support:support-v4:28.0.0-rc02'

 

数据库

apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao' // 只添加这一行

repositories {
        google()
        jcenter()
        mavenCentral() // add repository
    }

 dependencies {
        classpath 'com.android.tools.build:gradle:3.1.2'
        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }

allprojects {
    repositories {
        google()
        jcenter()
        maven { url "https://jitpack.io" }
    }
}

APP****************************

ublic class App extends Application {

    private DaoSession daoSession;
    private static App app;

    @Override
    public void onCreate() {
        super.onCreate();
        app = App.this;

        //获取数据库对象
        DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "goods", null);
        SQLiteDatabase db = helper.getWritableDatabase();
        DaoMaster daoMaster = new DaoMaster(db);
        //获取DaoSession
        daoSession = daoMaster.newSession();
        //初始化Fresco
        Fresco.initialize(this);
    }

    public static App getInstance() {
        return app;
    }

    public DaoSession getDaoSession() {
        return daoSession;
    }
}

 

MODEL

package com.baway.alex.weektestdemo.di.model;

import com.baway.alex.weektestdemo.data.App;
import com.baway.alex.weektestdemo.data.beans.HomeBean;
import com.baway.alex.weektestdemo.data.beans.HomeBeanDao;
import com.baway.alex.weektestdemo.data.beans.ResponseBean;
import com.baway.alex.weektestdemo.data.utils.OKHttpUtil;
import com.baway.alex.weektestdemo.di.IContract;
import com.google.gson.Gson;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;

public class ModelImpl implements IContract.IModel {
    //请求地址
    public static final String URL = "https://gank.io/api/data/%E7%A6%8F%E5%88%A9/10/1?tdsourcetag=s_pctim_aiomsg";

    @Override
    public void requestData(final OnCallBackLisenter onCallBackLisenter) {
        //①首先从数据库去取数据
        final HomeBeanDao homeBeanDao = App.getInstance().getDaoSession().getHomeBeanDao();
        List<HomeBean> beanList = homeBeanDao.loadAll();
        if (beanList.size() > 0) {
            // 接口回调回传数据
            // 把查询到的数据回传回去
            onCallBackLisenter.onCallBack(beanList);
            return;
        }
        //②取不到的数据的话,请求网络
        OKHttpUtil.getInstance().get(URL, new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                //标识,如果回传数据为空,请求失败
                onCallBackLisenter.onCallBack(null);
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                String responseString = response.body().string();
                Gson gson = new Gson();
                ResponseBean responseBean = gson.fromJson(responseString, ResponseBean.class);
                List<ResponseBean.ResultsBean> results = responseBean.getResults();
                //填充新数据集合,发挥给V层
                List<HomeBean> homeBeanList = new ArrayList<>();
                for (int i = 0; i < results.size(); i++) {
                    String desc = results.get(i).getDesc();
                    String url = results.get(i).getUrl();
                    HomeBean homeBean = new HomeBean();
                    homeBean.setImgUrl(url);
                    homeBean.setTitle(desc);
                    homeBeanList.add(homeBean);
                }
                onCallBackLisenter.onCallBack(homeBeanList);
                //③把数据存数据库中
                homeBeanDao.insertInTx(homeBeanList);
            }
        });
    }
}
adapter

package com.bwei.a0902zhoukaomoni.ui.activity;

import android.net.Uri;
import android.support.annotation.Nullable;

import com.bwei.a0902zhoukaomoni.R;
import com.bwei.a0902zhoukaomoni.data.GreenBean;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.facebook.drawee.view.SimpleDraweeView;

import java.util.List;

/**
 * Created by JackLee on 2018/9/2.
 */

class SubRecyclerAdapter extends BaseQuickAdapter<GreenBean,BaseViewHolder> {

    public SubRecyclerAdapter(int layoutResId, @Nullable List<GreenBean> data) {
        super(layoutResId, data);
    }

    @Override
    protected void convert(BaseViewHolder helper, GreenBean item) {
        helper.setText(R.id.tv_showInfo, item.getTitle());
        //Fresco加载图片
        SimpleDraweeView sdv_showIcon = helper.getView(R.id.sdv_showIcon);
        Uri uri = Uri.parse(item.getImageUrl());
        sdv_showIcon.setImageURI(uri);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值