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;
}
}