本文的主要思路就是:
1、网络上请求数据,申请网络权限 读写存储权限 2、布局我们的layout 3、下载之前我们要做什么 4、下载中我们要做什么 5、下载后我们要做什么
该说不说,上代码!
首先,申请网络权限:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>然后写布局文件:
<LinearLayout
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"
android:orientation="vertical"
tools:context=".MainActivity">
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="15dp" />
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="点击开始" />
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Hello world! imooc." />
</LinearLayout>布局初始化:
private void initView() {
mProgressBar = findViewById(R.id.progressBar);
mDownloadButton = findViewById(R.id.button);
mResultTextView = findViewById(R.id.textView);
}
设置点击监听
private void setListener() {
mDownloadButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//做下载的事情
}
});
}初始化UI数据
private void setData() {
mProgressBar.setProgress(0);
mDownloadButton.setText("点击下载");
mResultTextView.setText("准备下载");
}完整的代码如下:
package com.example.asynctaskproject;
import androidx.appcompat.app.AppCompatActivity;
import androidx.loader.content.AsyncTaskLoader;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
import org.w3c.dom.Text;
/*
1、网络上请求数据,申请网络权限 读写存储权限
2、布局我们的layout
3、下载之前我们要做什么 UI处理
4、下载中我们要做什么 数据处理
5、下载后我们要做什么 UI处理
*/
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private ProgressBar mProgressBar;
private Button mDownloadButton;
private TextView mResultTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
setListener();//设置点击监听
setData();//初始化UI数据
}
/*
视图初始化
*/
private void initView() {
mProgressBar = findViewById(R.id.progressBar);
mDownloadButton = findViewById(R.id.button);
mResultTextView = findViewById(R.id.textView);
}
private void setListener() {
mDownloadButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//做下载的事情
}
});
}
private void setData() {
mProgressBar.setProgress(0);
mDownloadButton.setText("点击下载");
mResultTextView.setText("准备下载");
}
public class DownloadAsyncTask extends AsyncTask<String,Integer,Boolean>{
/*
在异步任务之前,在主线程中
*/
@Override
protected void onPreExecute() {
super.onPreExecute();
//可操作UI
mDownloadButton.setText("下载中");
mResultTextView.setText("下载中");
}
//在另外一个线程处理事件
@Override
protected Boolean doInBackground(String... param) {
for (int i=0;i<1000;i++) {
Log.i(TAG, "doInBackgroud: " + param[0]);
//抛出进度
publishProgress(i);
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return true;
}
@Override
protected void onPostExecute(Boolean aBoolean) {
super.onPostExecute(aBoolean);
//也是在主线程中,执行结果 处理
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
//收到进度,然后处理,也是在UI进程
}
@Override
protected void onCancelled(Boolean aBoolean) {
super.onCancelled(aBoolean);
//
}
@Override
protected void onCancelled() {
super.onCancelled();
}
}
}版权声明:本文为weixin_58308529原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。