断点续传下载图片

mac2024-10-21  48

断点续传

网络请求适配器java代码

网络请求

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)