运行结果

Android studio 多线程网络文件下载_第1张图片

Android studio 多线程网络文件下载_第2张图片

Android studio 多线程网络文件下载_第3张图片

文件结构

Android studio 多线程网络文件下载_第4张图片

主要代码

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>

更多相关文章

  1. 自定义ProgressBar的图片
  2. Android 记录gitignore文件内容
  3. android判断网络是否能用
  4. Android写文件到SDCard的简单代码
  5. android显示gif图片
  6. android 拖拽图片&拖动浮动按钮到处跑
  7. Android和PC端通过局域网文件同步

随机推荐

  1. Android ProgressBar 进度条颜色和背景颜
  2. Eclipse 开发 Android, TableLayout(学习4
  3. 史上版本最全android源码下载地址
  4. android客户端ANR时导出Traces
  5. android host
  6. Android so 文件简介
  7. Android sensor介绍
  8. [Android实例] android多点触摸demo
  9. mmsplayer V2 for android 抢先发布
  10. Android实现手机和电脑间的UDP网络通信