断点续传

mac2024-10-02  9

断点续传

异步主类

异步

public class MyAsyncTask1 extends AsyncTask<String,Integer,String> { private Context context; private List<JavaBean.DataBean> list; private ProgressDialog progressDialog; private String path; private long maxLen; private long start; public MyAsyncTask1(Context context, List<JavaBean.DataBean> list, String path) { this.context = context; this.list = list; this.path = path; progressDialog=new ProgressDialog(context); progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.setTitle("正在下载"); progressDialog.setMessage("拼命为您下载中!!"); } @Override protected void onPreExecute() { super.onPreExecute(); progressDialog.show(); } @Override protected String doInBackground(String... strings) { try { URL url = new URL(strings[0]); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.connect(); if(connection.getResponseCode()==200) { maxLen = connection.getContentLength(); } } catch (IOException e) { e.printStackTrace(); } File file1 = new File(path); if (file1.exists()){ start=file1.length(); }else { start=0; } try { URL url = new URL(strings[0]); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestProperty("Range","bytes="+start+"-"+maxLen);; connection.connect(); if(connection.getResponseCode()==206) { InputStream is = connection.getInputStream(); File file3 = new File(path); RandomAccessFile rw = new RandomAccessFile(file3, "rw"); rw.seek(start); int len=0; byte[] b = new byte[1024]; long curLen=start; while ((len=is.read(b))!=-1){ rw.write(b,0,len); try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } curLen+=len; int progress= (int) ((curLen*100)/maxLen); publishProgress(progress); } } } catch (IOException e) { e.printStackTrace(); } return null; } @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); progressDialog.setProgress(values[0]); } @Override protected void onPostExecute(String s) { super.onPostExecute(s); if (progressDialog.getProgress()==100){ progressDialog.dismiss(); Toast.makeText(context, "下载完毕", Toast.LENGTH_SHORT).show(); }else { File file1 = new File(path); if (file1.exists()){ progressDialog.dismiss(); Toast.makeText(context, "已存在", Toast.LENGTH_SHORT).show(); } } } }

主类

public class MainActivity extends AppCompatActivity { private ListView lv1; private MyAdapter myAdapter; private List<JavaBean.DataBean> list = new ArrayList<>(); private Button dian; private static final String TAG = "MainActivity"; private String path="/storage/emulated/0/Pictures/"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE},100); } private void initView() { lv1 = (ListView) findViewById(R.id.lv_1); dian = (Button) findViewById(R.id.dian); new MyAsyncTask(MainActivity.this, list).execute("http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=20&page=1"); dian.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dian.setVisibility(View.GONE); myAdapter = new MyAdapter(MainActivity.this, list); Log.d(TAG, "onClick: "+list); lv1.setAdapter(myAdapter); } }); lv1.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, final int position, long id) { AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this); builder.setTitle("下载吗?老弟"); builder.setMessage("是否下载图片?"); builder.setPositiveButton("确认", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { new MyAsyncTask1(MainActivity.this,list,path+"第"+position+"图.jpg").execute(list.get(position).getPic()); } }).setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }).show(); } }); } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode==100 && grantResults[0]== PackageManager.PERMISSION_GRANTED){ initView(); }else { finish(); } } }
最新回复(0)