GreenDao的使用以及断点续传
<?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/";}
API
package 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. */ @Entity public 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'
GreenDao的使用以及断点续传相关推荐
- 安卓队列缓存文件,包括断点续传
想起来之前做视频缓存的工具类,没事记一下,中间用了一个开源的缓存的进度库,其他的都是自己写的 其中网络请求时用的OkHttp3 缓存进度库用的是: compile 'io.github.lizhang ...
- Android多线程断点续传下载原理及实现,移动开发工程师简历
RandomAccessFile 文件写入 下面再讲讲文件写入问题,由于我们是多线程下载,因此文件并不是每次都是从前往后一个个字节写入的,随时可能在文件的任何一个地方写入数据.因此我们需要能够在文件的 ...
- Greendao多线程下载
今天跟大家一起分享下android开发中比较难的一个环节,可能很多人看到这个标题就会感觉头很大,的确如果没有良好的编码能力和逻辑思维,这块是很难搞明白的,前面2次总结中已经为大家分享过有关技术的一些基 ...
- xutils断点续传_xUtils3的简单介绍
xUtils3的简介 xUtils是基于Afinal开发的目前功能比较完善的一个Android开源框架,最近又发布了xUtil3.0,在增加新功能的同时又提高了框架的性能. 1.xUtils包含了很多 ...
- greendao3出现 Error:Execution failed for task ':app:greendao'
错误如上图,最近下载一个Greendao的demo运行出现上述错误, 这个是build配置错误 修改build 就可以了 1 Moudle的gradle中 apply plugin: 'o ...
- asp.net断点续传技术
断点续传的原理 在了解HTTP断点续传的原理之前,先来说说HTTP协议,HTTP协议是一种基于tcp的简单协议,分为请求和回复两种.请求协议是由客户机(浏览器)向服务器(WEB SERVER)提交请求 ...
- Asp.net(c#)实现多线程断点续传
http://www.cnblogs.com/bestcomy/archive/2004/08/10/31950.html 以前一直错误的认为在ASP.NET中无法通过编程方式实现多线程断点续传,今天 ...
- ASP.NET WebAPi之断点续传下载(下)
前言 上一篇我们穿插了C#的内容,本篇我们继续来讲讲webapi中断点续传的其他情况以及利用webclient来实现断点续传,至此关于webapi断点续传下载以及上传内容都已经全部完结,一直嚷嚷着把S ...
- FTP、HTTP断点续传和多线程的协议基础
使用FTP或HTTP协议的下载软件支持断点续传和多线程的协议基础是: FTP用的是REST和SIZE:HTTP用的是Range. 1.FTP实现断点续传的协议基础 REST(有的服务器可能不支持此命令 ...
最新文章
- 微软安全管理解决方案 为企业安全保驾护航
- 最佳开发工具大全!前谷歌工程师两年打造“厂外生存指南”,登上GitHub热榜
- Wine cannot find the ncurses library (libncurses.so.5)
- python微信跳一跳小游戏刷分
- UWP x:bind
- linux string
- bes2300 tws配对_tws 耳机春天来了!
- Java web (JSP)入门
- CSS content 属性 CSS counter-increment 属性 CSS counter-reset 属性
- 学习记录:python快递价格计算器练习7.12
- 牛客java选择题每日打卡Day12
- 计算机想ping一下网络,电脑的Ping值和网络带宽之间有什么关系?
- 苹果开发者账号注册第一步,Apple ID 的双重认证,为 Apple ID 设置双重认证
- 刘禹锡最经典诗文10首,每一首都是千古名作,读懂受益一生
- Win7虚拟机无法连接网络怎么办?已解决!!
- php图片留白,PHP:图片不变形处理(留白处理与截取处理)-奇乐网
- 弱电布线工程实战攻略
- java 复制excel_Java 复制excel批注
- java代码输出万年历
- 短信生成器部分思路----Android