Retrofit+GreenDao请求数据保存数据库

来源:互联网 发布:vr室内设计软件 编辑:程序博客网 时间:2024/06/05 03:53
//本篇文章只供参考和学习greendao的使用和retrofit的网络请求判断在没网的时候从数据库读取展示数据//recyclerview适配器public class MyAdapter extends RecyclerView.Adapter <MyAdapter.ViewHolder>{    private Context context;    private List<CateGory> list;    public MyAdapter(Context context, List<CateGory> list) {        this.context = context;        this.list = list;    }    @Override    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        View view = View.inflate(context, R.layout.item, null);        ViewHolder holder = new ViewHolder(view);        return holder;    }    @Override    public void onBindViewHolder(ViewHolder holder, int position) {        holder.tvTitle.setText(list.get(position).getTitle());        holder.tvTime.setText(list.get(position).getTime());    }    @Override    public int getItemCount() {        return list.size();    }    class ViewHolder extends RecyclerView.ViewHolder{        @BindView(R.id.tv_title)        TextView tvTitle;        @BindView(R.id.tv_time)        TextView tvTime;        public ViewHolder(View itemView) {            super(itemView);            ButterKnife.bind(this, itemView);        }    }}//创建数据库
@Entitypublic class CateGory {    @Id    private Long id;    private String title;    private String time;    //这些是你创建数据库的字段这些创建完直接点Build>>MakeModel就能生成根类在使用greendao的时候到依赖问题    }

//泛型类
public class OneBean<T> {    private boolean error;    private T results;    public boolean isError() {        return error;    }    public void setError(boolean error) {        this.error = error;    }    public T getResults() {        return results;    }    public void setResults(T results) {        this.results = results;    }}

//请求的接口bean类
public class MyBean2 {    private String _id;    private String createdAt;    private String desc;    private String publishedAt;    private String source;    private String type;    private String url;    private boolean used;    private String who;    public String get_id() {        return _id;    }    public void set_id(String _id) {        this._id = _id;    }    public String getCreatedAt() {        return createdAt;    }    public void setCreatedAt(String createdAt) {        this.createdAt = createdAt;    }    public String getDesc() {        return desc;    }    public void setDesc(String desc) {        this.desc = desc;    }    public String getPublishedAt() {        return publishedAt;    }    public void setPublishedAt(String publishedAt) {        this.publishedAt = publishedAt;    }    public String getSource() {        return source;    }    public void setSource(String source) {        this.source = source;    }    public String getType() {        return type;    }    public void setType(String type) {        this.type = type;    }    public String getUrl() {        return url;    }    public void setUrl(String url) {        this.url = url;    }    public boolean isUsed() {        return used;    }    public void setUsed(boolean used) {        this.used = used;    }    public String getWho() {        return who;    }    public void setWho(String who) {        this.who = who;    }}
//主页的业务显示判断网络等等
public class HomeFragment extends Fragment {    @BindView(R.id.recyclerview)    RecyclerView recyclerview;    Unbinder unbinder;    private View view;    private List<CateGory> list;    private MyAdapter radapter;    private CateGoryDao dao;    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {        view = inflater.inflate(R.layout.home, container, false);        EventBus.getDefault().register(this);        unbinder = ButterKnife.bind(this, view);        return view;    }    @Override    public void onActivityCreated(@Nullable Bundle savedInstanceState) {        super.onActivityCreated(savedInstanceState);        dao= DbHelperUtils.getInstance(getActivity()).getCategoryDao();        list=new ArrayList<CateGory>();        radapter=new MyAdapter(getActivity(),list);        recyclerview.addItemDecoration(new DividerItemDecoration(getActivity(), LinearLayoutManager.VERTICAL));        LinearLayoutManager manager=new LinearLayoutManager(getActivity(),LinearLayoutManager.VERTICAL,false);        recyclerview.setLayoutManager(manager);        recyclerview.setAdapter(radapter);        int netype = InternetUtils.getInstance(getActivity()).getNetype();        if (netype==-1){            EventBus.getDefault().post("当前没有网络,需要显示数据库数据");            getDb();        }else if (netype==1){            EventBus.getDefault().post("当前有wifi网络");            getNetData();        }else{            EventBus.getDefault().post("当前手机有网络");            getNetData();        }    }    @Override    public void onDestroyView() {        super.onDestroyView();        unbinder.unbind();    }    public void getDb() {        List<CateGory> cateGories = dao.loadAll();        list.addAll(cateGories);        //刷新适配器        radapter.notifyDataSetChanged();    }    public void getNetData() {        Retrofit getretrofit = RetrofitUtils.getInstance("http://gank.io/api/").getretrofit();        RetrofitService retrofitService = getretrofit.create(RetrofitService.class);        Call<OneBean<List<MyBean2>>> call = retrofitService.get(10, 1);        call.enqueue(new Callback<OneBean<List<MyBean2>>>() {            @Override            public void onResponse(Call<OneBean<List<MyBean2>>> call, Response<OneBean<List<MyBean2>>> response) {                OneBean<List<MyBean2>> body = response.body();                List<MyBean2> results = body.getResults();                dao.deleteAll();                for(int i=0;i<results.size();i++){                list.add(new CateGory(null, results.get(i).getDesc(), results.get(i).getCreatedAt()));                    dao.insert(list.get(i));                }                radapter.notifyDataSetChanged();            }            @Override            public void onFailure(Call<OneBean<List<MyBean2>>> call, Throwable t) {            }        });    }    //事件总线程    @Subscribe    public void onEventMainThread(Object event) {        Toast.makeText(getActivity(), event + "", Toast.LENGTH_SHORT).show();    }    //销毁    @Override    public void onDestroy() {        super.onDestroy();        //取消注册        EventBus.getDefault().unregister(this);    }}//拼接接口  如果需要post请求只需要改成@post就可以了
public interface RetrofitService {    @GET("data/Android/{id1}/{id2}")    Call<OneBean<List<MyBean2>>> get(@Path("id1") int id1, @Path("id2") int id2);}
 
//数据库封装
public class DbHelperUtils {    private static volatile DbHelperUtils instance;    private final DaoSession daoSession;    private DbHelperUtils(Context context){        DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(context, "user", null);        SQLiteDatabase db = helper.getWritableDatabase();        DaoMaster daoMaster = new DaoMaster(db);        daoSession = daoMaster.newSession();    }    public static DbHelperUtils getInstance(Context context){        if (instance==null){            synchronized (DbHelperUtils.class){                if (null==instance){                    instance=new DbHelperUtils(context);                }            }        }        return instance;    }//如果需要换查询的数据库就需要改变CateGoryDao public CateGoryDao getCategoryDao(){    return daoSession.getCateGoryDao();}}
//请求网络封装
public class InternetUtils {    private static volatile InternetUtils instance;    private Context context;    private InternetUtils(Context context) {        this.context = context;    }    public static InternetUtils getInstance(Context context) {        if (instance == null) {            synchronized (InternetUtils.class) {                if (instance == null) {                    instance = new InternetUtils(context);                }            }        }        return instance;    }    public int getNetype() {        int neType = -1;        ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);        NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();        if (networkInfo == null) {            return neType;        }        int phoneType = networkInfo.getType();        if (phoneType==ConnectivityManager.TYPE_MOBILE){            neType=2;        }else if(phoneType==ConnectivityManager.TYPE_WIFI){            neType=1;        }        return neType;    }}

 
//网络请求解析封装
public class RetrofitUtils {    private static volatile RetrofitUtils instance;    private final Retrofit retrofit;    private RetrofitUtils(String baseurl) {        retrofit=new Retrofit.Builder()                .baseUrl(baseurl)//Retrofit网络请求再也不用写Gson解析了只需要GsonConverterFactory就行了                .addConverterFactory(GsonConverterFactory.create())                .build();    }    //简单的同步锁    public static RetrofitUtils getInstance(String baseurl){        if (instance==null){            synchronized (RetrofitUtils.class){                if (instance==null){                    instance=new RetrofitUtils(baseurl);                }            }        }        return instance;    }    //返回的是请求到的数据    public Retrofit getretrofit(){        return retrofit;    }}//MainActivity主页面只有5分Fragment在这就不一一展出了  每个类继承Fragment动态添加就行了
public class MainActivity extends AppCompatActivity {    @BindView(R.id.bottomTabBar)    BottomTabBar bottomTabBar;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        ButterKnife.bind(this);        bottomTabBar.init(getSupportFragmentManager())                .setImgSize(25,25)                .setFontSize(8)                .setTabPadding(4,6,10)                .setChangeColor(Color.RED,Color.BLACK)                .addTabItem("首页",R.drawable.home, HomeFragment.class)                .addTabItem("想法",R.drawable.home, Xiang.class)                .addTabItem("市场",R.drawable.home, ShiChang.class)                .addTabItem("通知",R.drawable.home, Tong.class)                .addTabItem("更多",R.drawable.home, More.class)                .isShowDivider(false)                .setOnTabChangeListener(new BottomTabBar.OnTabChangeListener() {                    @Override                    public void onTabChange(int position, String name) {                    }                });    }}
 //主页面
<?xml version="1.0" encoding="utf-8"?><RelativeLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"    android:layout_height="match_parent" tools:context="com.example.renzhijun20171201.MainActivity">    <com.hjm.bottomtabbar.BottomTabBar        android:id="@+id/bottomTabBar"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:layout_alignParentTop="true"        android:layout_alignParentLeft="true"        android:layout_alignParentStart="true">    </com.hjm.bottomtabbar.BottomTabBar></RelativeLayout>
//item布局
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent">    <ImageView        android:layout_width="100dp"        android:layout_height="100dp"        android:src="@mipmap/ic_launcher"        android:id="@+id/imageView" />    <TextView        android:id="@+id/tv_title"        android:textSize="20dp"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentTop="true"        android:layout_toRightOf="@+id/imageView"        android:layout_toEndOf="@+id/imageView" />    <TextView        android:id="@+id/tv_time"        android:textSize="15dp"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_below="@+id/tv_title"        android:layout_toRightOf="@+id/imageView"        android:layout_toEndOf="@+id/imageView"        android:layout_marginTop="26dp" /></RelativeLayout>


阅读全文
0 0