Android studio 多线程网络文件下载
16lz
2021-01-23
运行结果
文件结构
主要代码
MainActivity
package cn.edu.sicnu.threadfiledownload;import android.app.ProgressDialog;import android.content.DialogInterface;import android.content.Intent;import android.os.AsyncTask;import android.os.Environment;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.ArrayAdapter;import android.widget.EditText;import android.widget.ListView;import android.widget.ProgressBar;import android.widget.TextView;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.MalformedURLException;import java.net.URL;import java.net.URLConnection;import java.util.ArrayList;public class MainActivity extends AppCompatActivity { EditText editText_url; ListView listView; //heap堆,可以被整个对象所有方法访问 TextView textView; ProgressBar progressBar; ArrayList arrayList = new ArrayList<>(); ArrayList localImages = new ArrayList<>(); ArrayAdapter arrayAdapter; MyAsyncTask asyncTask; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); arrayList.add("http://img2.imgtn.bdimg.com/it/u=500808421,1575925585&fm=200&gp=0.jpg"); arrayList.add("http://img1.imgtn.bdimg.com/it/u=2883138594,3332343437&fm=27&gp=0.jpg"); arrayList.add("http://img0.imgtn.bdimg.com/it/u=2779717376,1807907918&fm=200&gp=0.jpg"); arrayList.add("http://img0.imgtn.bdimg.com/it/u=416447706,3692155938&fm=27&gp=0.jpg"); arrayList.add("http://img3.imgtn.bdimg.com/it/u=2058241956,1502683125&fm=27&gp=0.jpg"); arrayList.add("http://img0.imgtn.bdimg.com/it/u=2779717376,1807907918&fm=200&gp=0.jpg"); arrayList.add("http://img0.imgtn.bdimg.com/it/u=2779717376,1807907918&fm=200&gp=0.jpg"); editText_url = findViewById(R.id.editText_url); listView = findViewById(R.id.listView); arrayAdapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,arrayList); listView.setAdapter(arrayAdapter); textView = findViewById(R.id.textView); progressBar = findViewById(R.id.progressBar); asyncTask = new MyAsyncTask(); } public void add(View view){ arrayList.add(editText_url.getText().toString()); arrayAdapter.notifyDataSetChanged(); } public void download(View view){ switch (asyncTask.getStatus()){ case PENDING: asyncTask.execute(0); break; case RUNNING: break; case FINISHED: asyncTask = new MyAsyncTask(); asyncTask.execute(0); break; } } class MyAsyncTask extends AsyncTask{ @Override protected void onPreExecute() { super.onPreExecute(); localImages.clear(); } @Override protected Integer doInBackground(Integer... integers) { //在另外一个线程里面!!! for(int i=0;itry { URL url = new URL(s); URLConnection connection = url.openConnection(); int size = connection.getContentLength(); //图片大小 publishProgress(0,i+1,size); InputStream inputStream = connection.getInputStream(); //流 byte[] bytes = new byte[100]; int len = -1; //准备好外部存储文件 File file = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS); String filename = file.getAbsolutePath()+"/"+i+".jpg"; FileOutputStream fileOutputStream = new FileOutputStream(filename); while ((len=inputStream.read(bytes))!=-1){ fileOutputStream.write(bytes,0,len);// Thread.sleep(1); publishProgress(1,len); } fileOutputStream.close(); inputStream.close(); localImages.add(filename); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } return null; } @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); switch (values[0]){ case 0: textView.setText("正在下载第"+values[1]+"个文件!!!"); progressBar.setMax(values[2]); progressBar.setProgress(0); break; case 1: progressBar.incrementProgressBy(values[1]); break; } } @Override protected void onPostExecute(Integer integer) { super.onPostExecute(integer); textView.setText("下载完成!!!"); progressBar.setProgress(0); } } public void showImages(View view){ Intent intent = new Intent(this,Main2Activity.class); intent.putExtra("images",localImages); startActivity(intent); }}
Main2Activity
package cn.edu.sicnu.threadfiledownload;import android.content.Intent;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.ImageView;import android.widget.LinearLayout;import java.util.ArrayList;public class Main2Activity extends AppCompatActivity { LinearLayout layout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); layout = findViewById(R.id.layout); Intent intent = getIntent(); ArrayList images = (ArrayList) intent.getSerializableExtra("images"); for(int i=0;inew ImageView(this); imageView.setImageBitmap(bitmap); imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); imageView.setAdjustViewBounds(true); layout.addView(imageView); } }}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?><android.support.constraint.ConstraintLayout 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="cn.edu.sicnu.threadfiledownload.MainActivity" tools:layout_editor_absoluteY="81dp"> <EditText android:id="@+id/editText_url" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginEnd="16dp" android:layout_marginStart="16dp" android:ems="10" android:hint="Input image url" android:inputType="textPersonName" app:layout_constraintBottom_toTopOf="@+id/button" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/progressBar" /> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="16dp" android:layout_marginEnd="4dp" android:layout_marginStart="16dp" android:onClick="add" android:text="add" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@+id/button2" app:layout_constraintHorizontal_chainStyle="spread_inside" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/editText_url" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="download" android:text="download" app:layout_constraintBottom_toBottomOf="@+id/button" app:layout_constraintEnd_toStartOf="@+id/button3" app:layout_constraintStart_toEndOf="@+id/button" /> <Button android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="17dp" android:onClick="showImages" android:text="images" app:layout_constraintBottom_toBottomOf="@+id/button2" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@+id/button2" /> <ListView android:id="@+id/listView" android:layout_width="0dp" android:layout_height="0dp" android:layout_marginBottom="13dp" android:layout_marginEnd="9dp" android:layout_marginStart="9dp" android:layout_marginTop="16dp" app:layout_constraintBottom_toTopOf="@+id/progressBar" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <ProgressBar android:id="@+id/progressBar" style="?android:attr/progressBarStyleHorizontal" android:layout_width="0dp" android:layout_height="0dp" android:layout_marginBottom="110dp" android:layout_marginEnd="15dp" android:layout_marginStart="15dp" android:max="100" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/textView" /> <TextView android:id="@+id/textView" android:layout_width="0dp" android:layout_height="0dp" android:layout_marginEnd="13dp" android:layout_marginStart="13dp" android:layout_marginTop="362dp" app:layout_constraintBottom_toTopOf="@+id/progressBar" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" />android.support.constraint.ConstraintLayout>
activity_main2.xml
<?xml version="1.0" encoding="utf-8"?><android.support.constraint.ConstraintLayout 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="cn.edu.sicnu.threadfiledownload.Main2Activity"> <ScrollView android:id="@+id/scrollView" android:layout_width="0dp" android:layout_height="0dp" android:layout_marginBottom="8dp" android:layout_marginEnd="8dp" android:layout_marginStart="8dp" android:layout_marginTop="8dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:id="@+id/layout"/> ScrollView>android.support.constraint.ConstraintLayout>
更多相关文章
- 自定义ProgressBar的图片
- Android 记录gitignore文件内容
- android判断网络是否能用
- Android写文件到SDCard的简单代码
- android显示gif图片
- android 拖拽图片&拖动浮动按钮到处跑
- Android和PC端通过局域网文件同步