AsyncTask_初级应用
程序员文章站
2022-04-25 15:53:55
...
package com.example.day3;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
public class AsyncTaskActivity extends AppCompatActivity {
private TextView info;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_async_task);
info = findViewById(R.id.info);
//
//子线程处理数据 主线程处理ui
//Thread + Handler
//AsyncTask -> 线程池(2)
requestData();
}
private String apiUrl = "https://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=18679906337";
private void requestData() {
//创建AcyncTask,实现doInBackground方法
//调execute执行 -> 会导致doInBackground执行
//doInBackground执行完成,返回结果 -> 会导致onPostExecute执行
//execute() -> doInBackground()子线程中 -> onPostExecute()主线程中
//三个泛型
//Params 执行doInBackground的方法参数类型,调用execute()时传递过去
//Progress
//Result 执行doInBackground的返回类型
new AsyncTask<String, Void, String>() {//void
//实现doInBackground方法
@Override
protected String doInBackground(String[] objects) {//在子线程(后台)执行
String result = "";
try {
URL url = new URL(objects[0]);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setConnectTimeout(5000);
urlConnection.setReadTimeout(5000);
int responseCode = urlConnection.getResponseCode();
if(responseCode == 200) {
result = stream2String(urlConnection.getInputStream(), "gbk");
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
//当后台处理完成返回执行 在主线程中回调
@Override
protected void onPostExecute(String s) {
info.setText(s);
}
}.execute(apiUrl);
}
private String stream2String(InputStream inputStream, String charsetName) throws IOException {
StringBuilder stringBuilder = new StringBuilder();
InputStreamReader isr = new InputStreamReader(inputStream, charsetName);
BufferedReader br = new BufferedReader(isr);
//读取一行
//一行文本 null
for (String tmp = br.readLine(); tmp != null; tmp = br.readLine()) {
stringBuilder.append(tmp);
}
/*String tmp = br.readLine();
while (tmp != null) {
stringBuilder.append(tmp);
tmp = br.readLine();
}*/
return stringBuilder.toString();
}
}
上一篇: 房玄龄为什么会五天不喝一滴水,真相是什么
下一篇: AsyncTask的使用
推荐阅读
-
nw.js开发跨平台应用(2)使用nw打包项目
-
PHP fopen()和 file_get_contents()应用与差异介绍
-
详解json在php中的应用
-
php学习笔记 php中面向对象三大特性之一[封装性]的应用
-
[原创]分布式系统之缓存的微观应用经验谈(一) 【设计细节篇】
-
[原创]分布式系统之缓存的微观应用经验谈(二) 【主从和主备高可用篇】
-
html移动应用 input 标签 清除按钮功能如何实现(不触发键盘)
-
CSS规则层叠的应用 css必须要注意的几点
-
微软UWP应用意图一统跨平台 资深记者:玩儿完了
-
SpringBoot+Dubbo+Zookeeper整合搭建简单的分布式应用