实验报告五

实验五 多线程
1、 实验目的
(1) 验证多线程下同步UI的实现方式
2、实验要求
(1) 认真填写实验报告,要求附加部分运行界面和主要代码;
(2) 对设计好的程序,检查输出是否符合预期,如有错请分析错误原因并解决;
3、实验内容
(1) 在子线程中进行模拟下载,下载过程中发送通知消息;
(2) 在主线程的Handler中处理消息,更新界面;
https://www.jianshu.com/p/1067380e05c3
(3) 采用AsyncTask派生类实现多线程异步下载;
https://www.jianshu.com/p/e7ff6b8b10d9
(4) 实现多线程图片下载程序;
效果图:

实验报告五_第1张图片
1

实验报告五_第2张图片
2

代码:

package com.example.externalfile;

import android.Manifest;
import android.content.pm.PackageManager;
import android.os.AsyncTask;
import android.os.Environment;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

public class MainActivity extends AppCompatActivity {

    TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = findViewById(R.id.textView);
//检查是否有写入外部文件的权限
        if(ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){
            ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},0);
        }

 /*     写入字符串到文件的操作
        //得到外部公开文件夹下面的DOWNLOADS文件夹路劲
        File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
//        在该文件夹下创建新的文件
        File file = new File(path, "1.txt" );
//        打开一个文件输出流 捕获异常
        try {
//            文件流 只能二进制
            FileOutputStream fileOutputStream = new FileOutputStream(file);
//            封装一个字符串的流
                    OutputStreamWriter writer = new OutputStreamWriter(fileOutputStream);
//                等于-1 就读完了
                    writer.close();
            fileOutputStream.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
 */
}
//请求结果的回调
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if(requestCode == 0){
//            对应String[]的第一个
            if(grantResults[0] == PackageManager.PERMISSION_GRANTED){

            }else{
//                不允许就继续。。。
                ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},0);
            }
        }
    }
//    下载按钮的功能
    public void download(View v){
//        准备一个URL
        try {
            URL url1 = new URL("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1556464174901&di=822acd616133de9bffdd846a73d890aa&imgtype=jpg&src=http%3A%2F%2Fyesky2.img.xzstatic.com%2Fnews%2F201901%2F112257-5c341791b5136.jpg");
            URL url2 = new URL("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1556464174901&di=822acd616133de9bffdd846a73d890aa&imgtype=jpg&src=http%3A%2F%2Fyesky2.img.xzstatic.com%2Fnews%2F201901%2F112257-5c341791b5136.jpg");

            new MyAsyncTask().execute(url1,url2);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }

    }

//    网上下载图片的异步任务
//    希望传个url给他就可以了 下载过程中传个整数表示进度
class MyAsyncTask extends AsyncTask{
    @Override
//    点点点表示很多URL
    protected Integer doInBackground(URL... urls) {
        for(int i=0;i

重要细节

实验报告五_第3张图片
文件写入权限

实验报告五_第4张图片
访问网络权限
实验报告五_第5张图片
fileOutputStream说明
写入字符串-1
实验报告五_第6张图片
写入字符串-2
实验报告五_第7张图片
自动整理代码

你可能感兴趣的:(实验报告五)