<?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的使用以及断点续传相关推荐

  1. 安卓队列缓存文件,包括断点续传

    想起来之前做视频缓存的工具类,没事记一下,中间用了一个开源的缓存的进度库,其他的都是自己写的 其中网络请求时用的OkHttp3 缓存进度库用的是: compile 'io.github.lizhang ...

  2. Android多线程断点续传下载原理及实现,移动开发工程师简历

    RandomAccessFile 文件写入 下面再讲讲文件写入问题,由于我们是多线程下载,因此文件并不是每次都是从前往后一个个字节写入的,随时可能在文件的任何一个地方写入数据.因此我们需要能够在文件的 ...

  3. Greendao多线程下载

    今天跟大家一起分享下android开发中比较难的一个环节,可能很多人看到这个标题就会感觉头很大,的确如果没有良好的编码能力和逻辑思维,这块是很难搞明白的,前面2次总结中已经为大家分享过有关技术的一些基 ...

  4. xutils断点续传_xUtils3的简单介绍

    xUtils3的简介 xUtils是基于Afinal开发的目前功能比较完善的一个Android开源框架,最近又发布了xUtil3.0,在增加新功能的同时又提高了框架的性能. 1.xUtils包含了很多 ...

  5. greendao3出现 Error:Execution failed for task ':app:greendao'

    错误如上图,最近下载一个Greendao的demo运行出现上述错误, 这个是build配置错误 修改build 就可以了 1       Moudle的gradle中 apply plugin: 'o ...

  6. asp.net断点续传技术

    断点续传的原理 在了解HTTP断点续传的原理之前,先来说说HTTP协议,HTTP协议是一种基于tcp的简单协议,分为请求和回复两种.请求协议是由客户机(浏览器)向服务器(WEB SERVER)提交请求 ...

  7. Asp.net(c#)实现多线程断点续传

    http://www.cnblogs.com/bestcomy/archive/2004/08/10/31950.html 以前一直错误的认为在ASP.NET中无法通过编程方式实现多线程断点续传,今天 ...

  8. ASP.NET WebAPi之断点续传下载(下)

    前言 上一篇我们穿插了C#的内容,本篇我们继续来讲讲webapi中断点续传的其他情况以及利用webclient来实现断点续传,至此关于webapi断点续传下载以及上传内容都已经全部完结,一直嚷嚷着把S ...

  9. FTP、HTTP断点续传和多线程的协议基础

    使用FTP或HTTP协议的下载软件支持断点续传和多线程的协议基础是: FTP用的是REST和SIZE:HTTP用的是Range. 1.FTP实现断点续传的协议基础 REST(有的服务器可能不支持此命令 ...

最新文章

  1. 微软安全管理解决方案 为企业安全保驾护航
  2. 最佳开发工具大全!前谷歌工程师两年打造“厂外生存指南”,登上GitHub热榜
  3. Wine cannot find the ncurses library (libncurses.so.5)
  4. python微信跳一跳小游戏刷分
  5. UWP x:bind
  6. linux string
  7. bes2300 tws配对_tws 耳机春天来了!
  8. Java web (JSP)入门
  9. CSS content 属性 CSS counter-increment 属性 CSS counter-reset 属性
  10. 学习记录:python快递价格计算器练习7.12
  11. 牛客java选择题每日打卡Day12
  12. 计算机想ping一下网络,电脑的Ping值和网络带宽之间有什么关系?
  13. 苹果开发者账号注册第一步,Apple ID 的双重认证,为 Apple ID 设置双重认证
  14. 刘禹锡最经典诗文10首,每一首都是千古名作,读懂受益一生
  15. Win7虚拟机无法连接网络怎么办?已解决!!
  16. php图片留白,PHP:图片不变形处理(留白处理与截取处理)-奇乐网
  17. 弱电布线工程实战攻略
  18. java 复制excel_Java 复制excel批注
  19. java代码输出万年历
  20. 短信生成器部分思路----Android

热门文章

  1. MySQL 时间减法
  2. netstat的tcp4/6
  3. Python基础——分页器
  4. 英文SEO采集伪原创软件Kontent Machine批量搜刮采集伪原创软件
  5. mysql中的三目运算
  6. 计算机室的校规英语翻译,我们学校的校规英语作文含翻译(通用5篇)
  7. ASP.NET 的特点
  8. GBL610-ASEMI适配高端电源桥堆GBL610
  9. 汽车行业如何进行数字化转型?
  10. 利用SoapUI工具生成webservice客户端java代码