GreenDao和多线程下载


public class MainActivity extends AppCompatActivity {

    private RecyclerView mRv;
    private MyAdapter myAdapter;
    private UserDao userDao;
    private Handler handler = new Handler();
    private Subscription subscription;
    private ProgressBar mPb;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        show();

        DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(MyApp.getContext(), "mTable", null);
        DaoMaster daoMaster = new DaoMaster(devOpenHelper.getWritableDatabase());
        DaoSession daoSession = daoMaster.newSession();
        userDao = daoSession.getUserDao();

    }

    private void show() {
        Retrofit retrofit = new Retrofit.Builder().baseUrl(Api.KUAIXUN)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build();

        ApiService apiService = retrofit.create(ApiService.class);
        Observable<List<NewsBean>> noParams = apiService.getNoParams();
        noParams.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Subscriber<List<NewsBean>>() {

                    private List<NewsBean.DataBean> data;

                    @Override
                    public void onCompleted() {

                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.i("xxx",e.getMessage()+"sdsdd");
                    }

                    @Override
                    public void onNext(final List<NewsBean> newsBeen) {

                        for (int i=0;i<newsBeen.size();i++){
                            data = newsBeen.get(i).getData();
                            String img = data.get(i).getImg();
                            User u = new User(null, img);
                            userDao.insert(u);
                            Toast.makeText(MainActivity.this,"添加成功",Toast.LENGTH_SHORT).show();
                        }

                        List<User> users = userDao.loadAll();
                        for (int i=0;i<users.size();i++){
                            Log.i("xxx",users.toString());
                        }

                        myAdapter = new MyAdapter(MainActivity.this,data);
                        mRv.setAdapter(myAdapter);

                        myAdapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() {

                            private String url;

                            @Override
                            public void OnItemClick(int position) {

                            }

                            @Override
                            public void onItemLongClick(int position) {

                                mPb.setVisibility(View.VISIBLE);

                                url = data.get(position).getImg();
                                String title = data.get(position).getTitle();

                                subscription = RxDownload.getInstance()
                                        .maxThread(2)     //设置最大线程
                                        .maxRetryCount(10) //设置下载失败重试次数
                                        //.retrofit(myRetrofit)//若需要自己的retrofit客户端,可在这里指定
                                        //.defaultSavePath(defaultSavePath)//设置默认的下载路径
                                        .download(url, title+".jpg", null)
                                        .subscribeOn(Schedulers.io())
                                        .observeOn(AndroidSchedulers.mainThread())
                                        .subscribe(new Subscriber<DownloadStatus>() {
                                            @Override
                                            public void onCompleted() {

                                            }

                                            @Override
                                            public void onError(Throwable e) {

                                            }

                                            @Override
                                            public void onNext(final DownloadStatus status) {
                                                handler.post(new Runnable() {
                                                    @Override
                                                    public void run() {
                                                        int len = (int) status.getDownloadSize();
                                                        mPb.setProgress(mPb.getProgress() + len);
                                                        int max = mPb.getMax();
                                                        int progress = mPb.getProgress();

                                                        if(progress == max){
                                                            mPb.setVisibility(View.GONE);
                                                            Toast.makeText(MainActivity.this,"下载成功",Toast.LENGTH_SHORT).show();
                                                        }
/*                                                        int result = (progress * 100) / max;
                                                        mTv.setText("下载"+result+"%");*/
/*                                        try {
                                            Thread.sleep(1000);
                                        } catch (InterruptedException e) {
                                            e.printStackTrace();
                                        }*/

                                                    }
                                                });

                                            }
                                        });
                            }
                        });

                        //取消订阅, 即可暂停下载, 若服务端不支持断点续传,下一次下载会重新下载,反之会继续下载
                        /*if (subscription != null && !subscription.isUnsubscribed()) {
                            subscription.unsubscribe();
                        }*/

                        /*myAdapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() {
                                @Override
                            public void OnItemClick(int position) {
                                User u = new User(null, position+"");
                                userDao.insert(u);
                                Toast.makeText(MainActivity.this,"添加成功",Toast.LENGTH_SHORT).show();
                            }

                            @Override
                            public void onItemLongClick(int position) {
                                User findUser = userDao.queryBuilder().where(UserDao.Properties.Name.eq(position+"")).build().unique();
                                if(findUser!=null){
                                    userDao.deleteByKey(findUser.getId());
                                    Toast.makeText(MainActivity.this,"删除成功",Toast.LENGTH_SHORT).show();
                                }
                            }
                        });*/
                    }
                });
    }

    private void initView() {

        mPb = (ProgressBar) findViewById(R.id.pb);
        mRv = (RecyclerView) findViewById(R.id.rv);
        mRv.setLayoutManager(new LinearLayoutManager(this));
        mRv.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值