GreenDao的使用以及断点续传
来源:互联网 发布:python爬虫入门教程 编辑:程序博客网 时间:2024/05/23 14:35
<?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.baway.liuheng.dialog.activity.MainActivity"> <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/sfl" android:layout_width="368dp" android:layout_height="495dp" tools:layout_editor_absoluteY="8dp" tools:layout_editor_absoluteX="8dp"> <android.support.v7.widget.RecyclerView android:id="@+id/rlv" android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.v7.widget.RecyclerView> </android.support.v4.widget.SwipeRefreshLayout></RelativeLayout>
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="100dp"> <com.facebook.drawee.view.SimpleDraweeView android:id="@+id/img" android:layout_width="80dp" android:layout_height="80dp" android:layout_marginLeft="10dp" android:layout_marginTop="5dp" android:layout_marginBottom="5dp"/> <LinearLayout android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:orientation="vertical"> <TextView android:id="@+id/title" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:textSize="20sp" android:layout_marginTop="10dp"/> <LinearLayout android:id="@+id/ll" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:visibility="gone" android:gravity="center_vertical" android:orientation="horizontal"> <SeekBar android:id="@+id/sb" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1"/> <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="match_parent" android:textSize="18sp" android:layout_marginLeft="5dp" android:layout_marginRight="5dp" android:gravity="center" android:text="0%"/> </LinearLayout> </LinearLayout></LinearLayout>
view
package com.baway.liuheng.dialog.view;import com.baway.liuheng.dialog.bean.UserBean;import java.util.List;public interface RecyView { void showRecy(List<UserBean.DataBean> ub);}model
package com.baway.liuheng.dialog.model;import com.baway.liuheng.dialog.presenter.IRecyPresenter;public interface IRecyModel { void recy(int type, IRecyPresenter rp);}
package com.baway.liuheng.dialog.model;import android.util.Log;import com.baway.liuheng.dialog.bean.UserBean;import com.baway.liuheng.dialog.inter.APIservice;import com.baway.liuheng.dialog.inter.APi;import com.baway.liuheng.dialog.presenter.IRecyPresenter;import com.jakewharton.retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;import org.reactivestreams.Publisher;import java.util.List;import io.reactivex.Flowable;import io.reactivex.android.schedulers.AndroidSchedulers;import io.reactivex.functions.Function;import io.reactivex.schedulers.Schedulers;import io.reactivex.subscribers.DisposableSubscriber;import retrofit2.Retrofit;import retrofit2.converter.gson.GsonConverterFactory;/** * Created by lenovo on 2017/11/11. */public class RecyModel implements IRecyModel { @Override public void recy(int type, final IRecyPresenter rp) { Retrofit build = new Retrofit.Builder().baseUrl(APi.PATH) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .build(); APIservice apIservice = build.create(APIservice.class); Flowable<List<UserBean>> data = apIservice.getData(type); data.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) //主线程 .flatMap(new Function<List<UserBean>, Publisher<UserBean>>() { @Override public Publisher<UserBean> apply(List<UserBean> userBeen) throws Exception { return Flowable.fromIterable(userBeen); } }) .subscribeWith(new DisposableSubscriber<UserBean>() { @Override public void onNext(UserBean userBean) { List<UserBean.DataBean> been = userBean.getData(); Log.i("====-=-=-=-=-",been.toString()); rp.show(been); } @Override public void onError(Throwable t) { } @Override public void onComplete() { } }); }}API
package com.baway.liuheng.dialog.inter;/** * Created by lenovo on 2017/11/11. */public class APi { public static final String PATH="http://mnews.gw.com.cn/wap/data/news/txs/";}APIpackage com.baway.liuheng.dialog.inter;import com.baway.liuheng.dialog.bean.UserBean;import java.util.List;import io.reactivex.Flowable;import retrofit2.http.GET;import retrofit2.http.Path;/** * Created by lenovo on 2017/11/11. */public interface APIservice { @GET("page_{type}.json") Flowable<List<UserBean>> getData(@Path("type") int a);}PRESENTER
package com.baway.liuheng.dialog.presenter;import com.baway.liuheng.dialog.bean.UserBean;import java.util.List;/** * Created by lenovo on 2017/11/11. */public interface IRecyPresenter { void show(List<UserBean.DataBean> ub); void showModel(int type);}
PRESENTER
package com.baway.liuheng.dialog.presenter;import com.baway.liuheng.dialog.bean.UserBean;import com.baway.liuheng.dialog.model.IRecyModel;import com.baway.liuheng.dialog.model.RecyModel;import com.baway.liuheng.dialog.view.RecyView;import java.util.List;/** * Created by lenovo on 2017/11/11. */public class RecyPresenter implements IRecyPresenter { RecyView view; IRecyModel model; public RecyPresenter(RecyView view) { this.view = view; model=new RecyModel(); } @Override public void show(List<UserBean.DataBean> ub) { view.showRecy(ub); } @Override public void showModel(int type) { model.recy(type,this); }}
BEAN
package com.baway.liuheng.dialog.bean;import org.greenrobot.greendao.annotation.Entity;import org.greenrobot.greendao.annotation.Id;import org.greenrobot.greendao.annotation.Generated;/** * Created by lenovo on 2017/11/11. */@Entitypublic class ImgBean { @Id(autoincrement = true) Long Img; String Url; public String getUrl() { return this.Url; } public void setUrl(String Url) { this.Url = Url; } public Long getImg() { return this.Img; } public void setImg(Long Img) { this.Img = Img; } @Generated(hash = 1351764128) public ImgBean(Long Img, String Url) { this.Img = Img; this.Url = Url; } @Generated(hash = 2027780091) public ImgBean() { } }
ADAPTER
package com.baway.liuheng.dialog.adapter;import android.content.Context;import android.net.Uri;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.LinearLayout;import android.widget.SeekBar;import android.widget.TextView;import com.baway.liuheng.dialog.R;import com.baway.liuheng.dialog.bean.UserBean;import com.facebook.drawee.view.SimpleDraweeView;import java.util.List;/** * Created by lenovo on 2017/11/11. */public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder>{ private Context context; private List<UserBean.DataBean> list; public interface OnLintener{ void setOnLintener(int position, View view, View view1, View view2); } OnLintener onLintener; public void setOnLintener(OnLintener onLintener) { this.onLintener = onLintener; } public MyAdapter(Context context, List<UserBean.DataBean> list) { this.context = context; this.list = list; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(context).inflate(R.layout.item,parent,false); MyViewHolder holder = new MyViewHolder(view); return holder; } @Override public void onBindViewHolder(final MyViewHolder holder, final int position) { String img = list.get(position).getImg(); Uri uri = Uri.parse(img); holder.img.setImageURI(uri); holder.title.setText(list.get(position).getTitle()); holder.title.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onLintener.setOnLintener(position,holder.ll,holder.sb,holder.tv); } }); } @Override public int getItemCount() { return list.size(); } class MyViewHolder extends RecyclerView.ViewHolder { private final TextView title; private final SimpleDraweeView img; private final LinearLayout ll; private final SeekBar sb; private final TextView tv; public MyViewHolder(View itemView) { super(itemView); img = (SimpleDraweeView)itemView.findViewById(R.id.img); title = (TextView)itemView.findViewById(R.id.title); ll = (LinearLayout)itemView.findViewById(R.id.ll); sb = (SeekBar)itemView.findViewById(R.id.sb); tv = (TextView)itemView.findViewById(R.id.tv); } }}
ACTIVITY
package com.baway.liuheng.dialog.activity;import android.os.Bundle;import android.os.Environment;import android.os.Handler;import android.support.v4.widget.SwipeRefreshLayout;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.view.View;import android.widget.LinearLayout;import android.widget.SeekBar;import android.widget.TextView;import android.widget.Toast;import com.baway.liuheng.dialog.greendao.ImgBeanDao;import com.baway.liuheng.dialog.R;import com.baway.liuheng.dialog.adapter.MyAdapter;import com.baway.liuheng.dialog.bean.ImgBean;import com.baway.liuheng.dialog.bean.UserBean;import com.baway.liuheng.dialog.myapp.MyApp;import com.baway.liuheng.dialog.presenter.RecyPresenter;import com.baway.liuheng.dialog.view.RecyView;import java.util.List;import io.reactivex.android.schedulers.AndroidSchedulers;import io.reactivex.disposables.Disposable;import io.reactivex.functions.Action;import io.reactivex.functions.Consumer;import io.reactivex.schedulers.Schedulers;import zlc.season.rxdownload2.RxDownload;import zlc.season.rxdownload2.entity.DownloadStatus;public class MainActivity extends AppCompatActivity implements RecyView { private RecyPresenter presenter; private RecyclerView rlv; private SwipeRefreshLayout sfl; int a=1; private ImgBeanDao dao; private RxDownload rxDownload; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); presenter = new RecyPresenter(this); presenter.showModel(a); dao = MyApp.getApplication().getDaoSession().getImgBeanDao(); //配置断点续传 rxDownload = RxDownload.getInstance(this).defaultSavePath(Environment.getExternalStorageDirectory() + "/LH").maxThread(3); } private void initView() { rlv = (RecyclerView) findViewById(R.id.rlv); rlv.setLayoutManager(new LinearLayoutManager(this)); //刷新条目 sfl = (SwipeRefreshLayout) findViewById(R.id.sfl); sfl.setColorSchemeResources(R.color.colorAccent,R.color.colorPrimaryDark); sfl.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { new Handler().postDelayed(new Runnable() { @Override public void run() { sfl.setRefreshing(false); a++; presenter.showModel(a); } },2000); } }); } //回传数据 @Override public void showRecy(List<UserBean.DataBean> ub) { MyAdapter myAdapter = new MyAdapter(this, ub); rlv.setAdapter(myAdapter); for (int i = 0; i <ub.size(); i++) { add(ub.get(i).getImg()); } myAdapter.setOnLintener(new MyAdapter.OnLintener() { @Override public void setOnLintener(int position, View view, View view1, View view2) { xiazai(query().get(position).getUrl(),(LinearLayout)view,(SeekBar)view1,(TextView)view2); } }); } private void xiazai(String url, final LinearLayout view, final SeekBar view1, final TextView view2) { Disposable disposable = rxDownload .download(url) //只传url即可 .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer<DownloadStatus>() { @Override public void accept(DownloadStatus status) throws Exception { //DownloadStatus为下载进度 view.setVisibility(View.VISIBLE); double l = status.getDownloadSize() * 100 / status.getTotalSize(); view1.setProgress((int) l); view2.setText(l+"%"); } }, new Consumer<Throwable>() { @Override public void accept(Throwable throwable) throws Exception { //下载失败 new Handler().postDelayed(new Runnable() { @Override public void run() { view.setVisibility(View.GONE); } },2000); Toast.makeText(MainActivity.this,"下载失败",Toast.LENGTH_SHORT).show(); } }, new Action() { @Override public void run() throws Exception { //下载成功 new Handler().postDelayed(new Runnable() { @Override public void run() { view.setVisibility(View.GONE); } },2000); Toast.makeText(MainActivity.this,"下载成功",Toast.LENGTH_SHORT).show(); } }); } //插入数据 public void add(String Url){ ImgBean imgBean = new ImgBean(); imgBean.setUrl(Url); dao.insert(imgBean); } //查询数据 public List<ImgBean> query(){ List<ImgBean> img=dao.loadAll(); return img; }}
myapp
package com.baway.liuheng.dialog.myapp;import android.app.Application;import android.database.sqlite.SQLiteDatabase;import com.baway.liuheng.dialog.greendao.DaoMaster;import com.baway.liuheng.dialog.greendao.DaoSession;import com.facebook.drawee.backends.pipeline.Fresco;/** * Created by lenovo on 2017/11/11. */public class MyApp extends Application { private static MyApp application; private DaoMaster.DevOpenHelper mHelper; private SQLiteDatabase db; private DaoMaster mDaoMaster; private DaoSession mDaoSession; @Override public void onCreate() { super.onCreate(); application = this; setDatabase(); Fresco.initialize(this); } public static MyApp getApplication() { return application; } /** * 设置greenDao */ private void setDatabase() { // 通过DaoMaster 的内部类 DevOpenHelper,你可以得到一个便利的SQLiteOpenHelper 对象。 // 可能你已经注意到了,你并不需要去编写「CREATE TABLE」这样的 SQL 语句,因为greenDAO 已经帮你做了。 // 注意:默认的DaoMaster.DevOpenHelper 会在数据库升级时,删除所有的表,意味着这将导致数据的丢失。 // 所以,在正式的项目中,你还应该做一层封装,来实现数据库的安全升级。 mHelper = new DaoMaster.DevOpenHelper(this,"notes-db", null); db =mHelper.getWritableDatabase(); // 注意:该数据库连接属于DaoMaster,所以多个 Session 指的是相同的数据库连接。 mDaoMaster = new DaoMaster(db); mDaoSession = mDaoMaster.newSession(); } public DaoSession getDaoSession() { return mDaoSession; } public SQLiteDatabase getDb() { return db; }}
QUANXIAN
compile 'com.squareup.retrofit2:retrofit:2.0.0'compile 'com.squareup.retrofit2:converter-gson:2.0.2'compile 'io.reactivex.rxjava2:rxjava:2.0.0-RC3'compile 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0-RC3'compile 'io.reactivex.rxjava2:rxandroid:2.0.0-RC1'compile 'com.facebook.fresco:fresco:1.5.0'compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'compile'org.greenrobot:greendao:3.1.0'compile'org.greenrobot:greendao-generator:3.1.0'compile 'zlc.season:rxdownload2:2.0.4'<uses-permission android:name="android.permission.INTERNET"/>android:name=".myapp.MyApp"
GREENDAO的集成
classpath 'org.greenrobot:greendao-gradle-plugin:3.1.0'
apply plugin:'org.greenrobot.greendao'greendao{ schemaVersion 1 daoPackage'com.baway.liuheng.dialog' targetGenDir'src/main/java'}compile'org.greenrobot:greendao:3.1.0'compile'org.greenrobot:greendao-generator:3.1.0'
阅读全文
0 0
- GreenDao的使用以及断点续传
- 关于断点续传和greendao一起使用
- GreenDao配置以及使用
- GreenDao的使用以及一些细节的总结
- GreenDao的基本使用以及遇到的坑
- Greendao+多线程断点续传
- Greendao+多线程断点续传
- Greendao+多线程断点续传
- Greendao+多线程断点续传
- Greendao+多线程断点续传
- Greendao+多线程断点续传
- 断点续传加greendao
- 多线程断点续传+GreenDao
- 多线程断点续传GreenDao版
- Greendao+多线程断点续传
- 利用GreenDao多线程断点续传
- Android Greendao+多线程断点续传
- GreenDao+多线程断点续传
- 杭电ACM OJ 1013 Digital Roots 如何用递归优雅地把一个未知长度的长整数的每一位拆分出来
- 招聘会感悟
- pots
- Magento利用价格(price)筛选商品
- HDU2149 巴什博弈
- GreenDao的使用以及断点续传
- 懒汉式单例模式和饿汉式单例模式的区别
- 滑动fragment的两种方法
- 总结面试中遇到的题目---持续更新
- Android应用电量优化小结
- 输出三个整数
- 计算机概论(二)
- OkHttp请求_springview_recyclerview上拉刷新下拉加载
- 软件工程(C编码实践篇)学习总结