断点续传下载图片

网络请求

public class Uitls extends AsyncTask<String,Integer,String> {
    private String path; // 储存地址
    private int end; // 文件总长度
    private long start; // 起始值
    private Handler handler;
    private Context context;
    private InputStream inputStream;
    private RandomAccessFile rw;

    public Uitls(String path, Handler handler, Context context) {
        this.path = path;
        this.handler = handler;
        this.context = context;
    }

    @Override
    protected String doInBackground(String... strings) {
        // 第一次请求
        try {
            URL url = new URL(strings[0]);
            URLConnection urlConnection = url.openConnection();
            urlConnection.connect();
            end = urlConnection.getContentLength();
            handler.post(new Runnable() {
                @Override
                public void run() {
                    Share.progressBar.setVisibility(View.VISIBLE);
                    Share.progressBar.setMax(end);
                }
            });
        } catch (Exception e) {
            e.printStackTrace();
        }
        // 第二次 请求
        File file = new File(path);
        if (file.exists()){
            start = file.length();
        }else {
            start = 0;
        }
        try {
            URL url = new URL(strings[0]);
            URLConnection connection = url.openConnection();
            // 设置请求头
            connection.setRequestProperty("Range","bytes="+start+"-"+end);
            connection.connect();
            inputStream = connection.getInputStream();
            rw = new RandomAccessFile(path, "rw");
            int len = 0;
            byte[] bys = new byte[1024];
            while ((len = inputStream.read(bys)) != -1){
                rw.write(bys,0,len);
                start+= len;
                publishProgress((int) start);
            }

            Log.i("---", "doInBackground: "+Share.lists.get(Share.index).getTitle());
            SharedPreferences sharedPreferences = context.getSharedPreferences(Share.lists.get(Share.index).getTitle(), Context.MODE_PRIVATE);
            SharedPreferences.Editor edit = sharedPreferences.edit();
            edit.putString("picName",Share.lists.get(Share.index).getTitle());
            edit.commit();
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if (inputStream!=null){
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }else if (rw!=null){
                try {
                    rw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return null;
    }

    @Override
    protected void onProgressUpdate(Integer... values) {
        super.onProgressUpdate(values);
        Share.progressBar.setProgress(values[0]);
    }

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);

        Share.progressBar.setVisibility(View.GONE);

    }
}

适配器

public class MyAdapter extends BaseAdapter {
    private List<JavaBean.DataBean> lists;
    private Context context;
    private LayoutInflater layoutInflater;

    public MyAdapter(List<JavaBean.DataBean> lists, Context context) {
        this.lists = lists;
        this.context = context;
        layoutInflater = LayoutInflater.from(context);
    }

    @Override
    public int getCount() {
        return lists.size();
    }

    @Override
    public Object getItem(int position) {
        return lists.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;
        if(convertView == null){
            holder = new ViewHolder();
            convertView  = layoutInflater.inflate(R.layout.item_layout,null);
            holder.textView_title = convertView.findViewById(R.id.textView_title);
            holder.imageView_Pic = convertView.findViewById(R.id.imageView_Pic);
            convertView.setTag(holder);
        }else {
            holder = (ViewHolder) convertView.getTag();
        }
        Glide.with(context).load(lists.get(position).getPic()).into(holder.imageView_Pic);
        holder.textView_title.setText(lists.get(position).getTitle());
        return convertView;
    }
    class ViewHolder{
        private TextView textView_title;
        private ImageView imageView_Pic;
    }
}

java代码

public class MainActivity extends AppCompatActivity {

    private ListView listView;
    private List<JavaBean.DataBean> lists = new ArrayList<>();
    private MyAdapter adapter;
    private AlertDialog.Builder builder; //对话框
    private ProgressBar pb;
    private String path = "/storage/emulated/0/";
    private Handler handler = new Handler();
    private String picName;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        requestPermissions(
                new String[]{
                        Manifest.permission.READ_EXTERNAL_STORAGE,
                        Manifest.permission.WRITE_EXTERNAL_STORAGE
                }, 100
        );
    }

    private void initView() {
        listView = (ListView) findViewById(R.id.listView);
        pb = (ProgressBar) findViewById(R.id.pb);
        Share.progressBar = pb;
        // 网络请求数据
        OkGo.<String>get("http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=10&page=1").execute(new StringCallback() {
            @Override
            public void onSuccess(Response<String> response) {
                String json = response.body();
                JavaBean javaBean = JSON.parseObject(json, JavaBean.class);
                lists.addAll(javaBean.getData());
                Share.lists = lists;
                adapter = new MyAdapter(lists, MainActivity.this);
                listView.setAdapter(adapter);
            }
        });

        // listView 点击的监听
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {
                Share.index = position;
//                Log.i("---", "position: "+position);
                SharedPreferences sharedPreferences = getSharedPreferences(lists.get(position).getTitle(),MODE_PRIVATE);
                picName = sharedPreferences.getString("picName", "no");
                builder = new AlertDialog.Builder(MainActivity.this);
                builder.setIcon(R.mipmap.ic_launcher);
                builder.setTitle("");
                builder.setMessage("是否下载");
                builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { // 积极按钮
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        if (picName.equals("no")){ // 说明没有下载
                            new Uitls(path+"img"+Share.index+".jpg",handler,MainActivity.this).execute(lists.get(position).getPic());
                            Toast.makeText(MainActivity.this, "下载成功", Toast.LENGTH_SHORT).show();
                        }else {
                            Toast.makeText(MainActivity.this, "图片已下载!", Toast.LENGTH_SHORT).show();
                        }
                    }
                });
                builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { // 消极按钮
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                    }
                });
                AlertDialog alertDialog = builder.create();
                alertDialog.show();
            }
        });
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值