1. 程式人生 > >greenDao 資料庫框架簡單使用和Fresco 簡單載入圖片

greenDao 資料庫框架簡單使用和Fresco 簡單載入圖片

首先

在專案下 -----------在repositories的括號里加入倉庫---- mavenCentral() ------------- 在dependencies的括號里加入外掛--------- classpath ‘org.greenrobot:greendao-gradle-plugin:3.2.2’ ---------------在app裡的build最上面--------------------- apply plugin: ‘org.greenrobot.greendao’ ----------------app裡的build加依賴---------------------- implementation ‘org.greenrobot:greendao:3.2.2’ ----------------在dependencies的上面-----------包名改了!!!去清單檔案裡複製 greendao { schemaVersion 1 //版本 daoPackage ‘包名.greendao’ // 一般為app包名+生成檔案的資料夾名 targetGenDir ‘src/main/java’ //生成檔案路徑 }

先引入fresco 依賴

implementation 'com.facebook.fresco:fresco:1.11.0'

再寫個APP 類 和去清單檔案寫name

import android.app.Application;
import com.facebook.drawee.backends.pipeline.Fresco;

//繼承application
public class APP extends Application {

//重寫oncreate方法
@Override
public void onCreate() {
    super.onCreate();
    //初始化和記得去清單檔案設定name
    Fresco.initialize(this);
}
}

清單檔案的name

 android:name=".APP"

先封裝網址資料的bean 此處省略

在封裝JsonBean

import org.greenrobot.greendao.annotation.Entity; import org.greenrobot.greendao.annotation.Id; import org.greenrobot.greendao.annotation.Generated;

@Entity
public class JsonBean {

//封裝大long 的id 和字串json
//註解@Id 括號auto 主鍵自增 為真 方法上面在註解@entity 在ctrl+fn+f9自動生成
@Id(autoincrement = true)
private Long id;
private String json;

@Generated(hash = 595762614)
public JsonBean(Long id, String json) {
    this.id = id;
    this.json = json;
}
@Generated(hash = 1926928967)
public JsonBean() {
}
public Long getId() {
    return this.id;
}
public void setId(Long id) {
    this.id = id;
}
public String getJson() {
    return this.json;
}
public void setJson(String json) {
    this.json = json;
}
}

然後會自動生成是三個類

在這裡插入圖片描述

在寫兩個工具類一個okHttpUtils此處省略

另一個JsonBeanUtils 工具類 有增刪改查

import android.content.Context; import android.database.sqlite.SQLiteDatabase; import java.util.List; import text.mfy.com.demo01_greendao.bean.JsonBean; import text.mfy.com.demo01_greendao.greendao.DaoMaster; import text.mfy.com.demo01_greendao.greendao.JsonBeanDao;

public class JsonBeanUtils {

private static JsonBeanUtils jsonBeanUtils;
private JsonBeanDao jsonBeanDao;

//本類構造改成私有的private
private JsonBeanUtils() {
}

//公共靜態本類的名字 加個get  大小括號
public static JsonBeanUtils getJsonBeanUtils(){
    //判斷 提上去的類名 ==空
    if(jsonBeanUtils==null){
        //new  本類名 返回值 提上去
        jsonBeanUtils = new JsonBeanUtils();
    }
    //返回提上去的類名
    return jsonBeanUtils;
};

//公共的 初始化方法 括號裡傳上下文
public void init(Context context){
    //例項化dao master 裡的方法大寫D 刪了括號。大寫D  括號傳上下文和引號資料庫名 返回值
    DaoMaster.DevOpenHelper mmm = new DaoMaster.DevOpenHelper(context, "mmm");
    //用mmm獲取讀寫 返回值 db
    SQLiteDatabase db = mmm.getWritableDatabase();
    //例項化dao master  傳db
    DaoMaster daoMaster = new DaoMaster(db);
    //呼叫daomater 裡的newsession .獲取本類名 提上去
     jsonBeanDao = daoMaster.newSession().getJsonBeanDao();

}

//公共的新增方法 傳一個物件jsonbean
public void insert(JsonBean jsonBean){
    //呼叫jsonbean dao 裡的方法 insert 傳物件JSoneban
    jsonBeanDao.insert(jsonBean);
}

//查詢全部方法 不傳東西
public List<JsonBean> select(){
    //直接返回json bean dao lodall 強轉
    return jsonBeanDao.loadAll();
}

//單個查詢 傳字元型 key selectById
public JsonBean selectById(String key){
    //直接返回json bean dao lode  強轉大寫long .p 傳key
    return jsonBeanDao.load(Long.parseLong(key));
}

//刪除方法傳 字元型key
public void delete(String key){
    //呼叫驚悚beandao  刪除bykey 括號裡先大寫long .parselong  傳key
    jsonBeanDao.deleteByKey(Long.parseLong(key));
}

//刪除全部 不傳
public void deleteAll(){
    //直接呼叫刪除all  全部
    jsonBeanDao.deleteAll();
}

//修改方法 傳物件
public void update(JsonBean jsonBean){
    //呼叫jsonbeandao update 傳物件
    jsonBeanDao.update(jsonBean);
}
}

主頁面佈局

<android.support.v7.widget.RecyclerView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/recycler"
    ></android.support.v7.widget.RecyclerView>

Recycler 條目佈局 圖片控制元件Fresco中的SimpleDraweeView

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">

<com.facebook.drawee.view.SimpleDraweeView
    android:id="@+id/simple"
    android:layout_width="80dp"
    android:layout_height="80dp" />

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:lines="1"
        android:textColor="#222222"
        android:textSize="16sp" />
        
    <TextView
        android:id="@+id/desc"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:lines="1"
        android:textColor="#999999"
        android:textSize="14sp" />
</LinearLayout>
</LinearLayout>

介面卡

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.facebook.drawee.view.SimpleDraweeView;
import java.util.List;

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHodler> {

private Context context;
private List<Bean.ItemsBean> list;

public MyAdapter(Context context, List<Bean.ItemsBean> list) {
    this.context = context;
    this.list = list;
}

@NonNull
@Override
public MyViewHodler onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    View view = View.inflate(context, R.layout.layout_news, null);
    MyViewHodler myViewHodler = new MyViewHodler(view);
    return myViewHodler;
}

@Override
public void onBindViewHolder(@NonNull MyViewHodler myViewHodler, int i) {
    myViewHodler.mTitle.setText(list.get(i).getTitle());
    myViewHodler.mDesc.setText(list.get(i).getDesc());
    myViewHodler.mSimpleDraweeView.setImageURI(list.get(i).getImage());
}

@Override
public int getItemCount() {
    return list.size();
}

public class MyViewHodler extends RecyclerView.ViewHolder {
    TextView mTitle, mDesc;
    SimpleDraweeView mSimpleDraweeView;

    public MyViewHodler(@NonNull View itemView) {
        super(itemView);
        mSimpleDraweeView = (SimpleDraweeView) itemView.findViewById(R.id.simple);
        mTitle = (TextView) itemView.findViewById(R.id.title);
        mDesc = (TextView) itemView.findViewById(R.id.desc);
    }
}
}

主頁面Activity

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import com.google.gson.Gson;
import java.util.List;

public class MainActivity extends AppCompatActivity {

private RecyclerView recycler;
private String url1="請求資料的網址";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //  先初始化工具類  傳 上下文
    JsonBeanUtils.getJsonBeanUtils().init(this);
    //找控制元件提上去
    recycler=(RecyclerView)findViewById(R.id.recycler);
    //new 線性 傳本頁面
    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
    //設定方向
    linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
    //給recycler設定線性佈局
    recycler.setLayoutManager(linearLayoutManager);
    //判斷網路請求 括號裡呼叫判斷網路的方法
    if(isConnected(this)){
        //為真就請求資料
        //請求網路資料
        dohttp();
    }else{
        //為假
        //呼叫工具類的查詢  獲取0 獲取json 返回字串
        String json = JsonBeanUtils.getJsonBeanUtils().select().get(0).getJson();

        //複製下面的介面卡 把s1改了json
        //new gson from 傳字串和bean類
        Bean bean = new Gson().fromJson(json, Bean.class);
        //呼叫bean類的集合返回集合
        List<Bean.ItemsBean> items = bean.getItems();
        //設定介面卡 傳本頁面和集合
        MyAdapter myAdapter=new MyAdapter(MainActivity.this,items);
        //給recycler設定介面卡
        recycler.setAdapter(myAdapter);
    }
}

private void dohttp() {
    //new 工具類
    new OkHttpUtils().get(url1).result(new OkHttpUtils.OkHttpListener() {
        @Override
        public void success(String s1) {
            //例項化物件jsonbean
            JsonBean jsonBean=new JsonBean();
            //往物件裡面傳s1
            jsonBean.setJson(s1);
            //呼叫工具類的新增方法  括號裡傳物件  在這個上面例項化jsonbean 物件
            JsonBeanUtils.getJsonBeanUtils().insert(jsonBean);

            //new gson from 傳字串和bean類
            Bean bean = new Gson().fromJson(s1, Bean.class);
            //呼叫bean類的集合返回集合
            List<Bean.ItemsBean> items = bean.getItems();
            //設定介面卡 傳本頁面和集合
            MyAdapter myAdapter=new MyAdapter(MainActivity.this,items);
            //給recycler設定介面卡
            recycler.setAdapter(myAdapter);
        }
    });
}
/**
     * 檢查是否連線網路
     *
     * @param context
     * @return
     */
    public static boolean isConnected(Context context) {
        ConnectivityManager connectMgr = (ConnectivityManager) context.getSystemService(context.CONNECTIVITY_SERVICE);
        NetworkInfo mobNetInfo = connectMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
        NetworkInfo wifiNetInfo = connectMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
        if (mobNetInfo != null && mobNetInfo.isConnected()) {
            return true;
        }
        if (wifiNetInfo != null && wifiNetInfo.isConnected()) {
            return true;
        }
        return false;
    }
}