AsyncTask
来源:互联网 发布:mac战网该服务器 编辑:程序博客网 时间:2024/06/03 23:02
package com.example.kson.asynctaskdemos;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class AsyncTaskActivity extends AppCompatActivity {
private ImageView mImgIv;
private ProgressBar mProgressBar;
private TextView mProgressTv;
private LinearLayout mProgressLayout;
private Bitmap mBitmap;
private String url = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1502264113683&di=28e9111d7609c9a97822fd0fd38cb26e&imgtype=0&src=http%3A%2F%2Fimg3.duitang.com%2Fuploads%2Fitem%2F201510%2F08%2F20151008112359_CYhWz.jpeg";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_net);
initView();
initData();
new MyAsyncTask().execute(url);
}
private void initData() {
mProgressBar.setMax(100);
}
private void initView() {
mImgIv = (ImageView) findViewById(R.id.iv_img);
mProgressBar = (ProgressBar) findViewById(R.id.pb_progress);
mProgressTv = (TextView) findViewById(R.id.tv_progress);
mProgressLayout = (LinearLayout) findViewById(R.id.layout_progress);
}
class MyAsyncTask extends AsyncTask<String, Integer, Bitmap> {
/**
* 请求之前运行的方法,用于处理请求之前的逻辑(主线程)
*/
@Override
protected void onPreExecute() {
mProgressLayout.setVisibility(View.VISIBLE);
}
/**
* 请求网络调用的方法(子线程)
* @param strings
* @return
*/
@Override
protected Bitmap doInBackground(String... strings) {
try {
URL url = new URL(strings[0]);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.connect();
// //获取返回的数据的总字节长度
int totalLength = connection.getContentLength();
// //声明当前的字节长度
int currLength = 0;
//转换成当前百分比进度
int progress = 0;//当前字节数/总的字节数*100
if (200 == connection.getResponseCode()) {
InputStream in = connection.getInputStream();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
int length = 0;
byte[] buffer = new byte[100];
while ((length = in.read(buffer)) != -1) {
currLength +=length;
progress = (int) ((float)currLength/totalLength*100);
System.out.println("progress===="+progress);
Thread.sleep(10);
publishProgress(progress);
byteArrayOutputStream.write(buffer, 0, length);
}
return BitmapFactory.decodeByteArray(byteArrayOutputStream.toByteArray(), 0, byteArrayOutputStream.size());
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 请求过程中,进度条的更新(主线程)
* @param values 进度数值
*/
@Override
protected void onProgressUpdate(Integer... values) {
mProgressBar.setProgress(values[0]);
mProgressTv.setText(values[0]+"%");
}
/**
* 请求结束后调用的方法,用于更新ui(主线程)
* @param bitmap
*/
@Override
protected void onPostExecute(Bitmap bitmap) {
mImgIv.setImageBitmap(bitmap);
mProgressLayout.setVisibility(View.GONE);
}
}
class Mtask extends AsyncTask<Void,Void,Void>{
@Override
protected Void doInBackground(Void... voids) {
return null;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
}
@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
}
}
}
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class AsyncTaskActivity extends AppCompatActivity {
private ImageView mImgIv;
private ProgressBar mProgressBar;
private TextView mProgressTv;
private LinearLayout mProgressLayout;
private Bitmap mBitmap;
private String url = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1502264113683&di=28e9111d7609c9a97822fd0fd38cb26e&imgtype=0&src=http%3A%2F%2Fimg3.duitang.com%2Fuploads%2Fitem%2F201510%2F08%2F20151008112359_CYhWz.jpeg";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_net);
initView();
initData();
new MyAsyncTask().execute(url);
}
private void initData() {
mProgressBar.setMax(100);
}
private void initView() {
mImgIv = (ImageView) findViewById(R.id.iv_img);
mProgressBar = (ProgressBar) findViewById(R.id.pb_progress);
mProgressTv = (TextView) findViewById(R.id.tv_progress);
mProgressLayout = (LinearLayout) findViewById(R.id.layout_progress);
}
class MyAsyncTask extends AsyncTask<String, Integer, Bitmap> {
/**
* 请求之前运行的方法,用于处理请求之前的逻辑(主线程)
*/
@Override
protected void onPreExecute() {
mProgressLayout.setVisibility(View.VISIBLE);
}
/**
* 请求网络调用的方法(子线程)
* @param strings
* @return
*/
@Override
protected Bitmap doInBackground(String... strings) {
try {
URL url = new URL(strings[0]);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.connect();
// //获取返回的数据的总字节长度
int totalLength = connection.getContentLength();
// //声明当前的字节长度
int currLength = 0;
//转换成当前百分比进度
int progress = 0;//当前字节数/总的字节数*100
if (200 == connection.getResponseCode()) {
InputStream in = connection.getInputStream();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
int length = 0;
byte[] buffer = new byte[100];
while ((length = in.read(buffer)) != -1) {
currLength +=length;
progress = (int) ((float)currLength/totalLength*100);
System.out.println("progress===="+progress);
Thread.sleep(10);
publishProgress(progress);
byteArrayOutputStream.write(buffer, 0, length);
}
return BitmapFactory.decodeByteArray(byteArrayOutputStream.toByteArray(), 0, byteArrayOutputStream.size());
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 请求过程中,进度条的更新(主线程)
* @param values 进度数值
*/
@Override
protected void onProgressUpdate(Integer... values) {
mProgressBar.setProgress(values[0]);
mProgressTv.setText(values[0]+"%");
}
/**
* 请求结束后调用的方法,用于更新ui(主线程)
* @param bitmap
*/
@Override
protected void onPostExecute(Bitmap bitmap) {
mImgIv.setImageBitmap(bitmap);
mProgressLayout.setVisibility(View.GONE);
}
}
class Mtask extends AsyncTask<Void,Void,Void>{
@Override
protected Void doInBackground(Void... voids) {
return null;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
}
@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
}
}
}
阅读全文
0 0
- AsyncTask
- ASyncTask
- AsyncTask
- AsyncTask
- AsyncTask
- AsyncTask
- AsyncTask
- AsyncTask
- AsyncTask
- AsyncTask
- AsyncTask
- AsyncTask
- AsyncTask
- AsyncTask
- AsyncTask
- AsyncTask
- AsyncTask
- AsyncTask
- 利用反射实现一个Java文件书写多个Servlet,无框架
- Oracle常用函数
- c# 值类型和引用类型的区别,装箱,拆箱。
- 添加圆角的4种方法
- 在cygwin上运行apache2
- AsyncTask
- 【二分匹配入门专题1】P
- 通俗易懂看RB-tree(一)
- 从数据库中查找数据并按首字母排序
- [题解]bzoj4719 NOIP2016天天爱跑步
- 从微信AI首席顾问到金融文档智能
- [RK3288][Android5.1] LG屏edp : rk808+edp
- 并发编程(四):并发工具类
- h5 面试题 在js中typeof返回结果有几种?