public class MainActivity extends Activity implements OnClickListener {
private Button button;
private TextView textView;
private ImageView imageView;
/**
* 使用handler的封装类来实现获取网络连接(不需要开子线程)
* AsyncTask<(在启动时,传递的参数类型),(在获取数据过程中,加载数据进度的类型,integer/void), 最终获取的数据的类型>
* 三个参数的类型
* 第一个代表输入到任务的参数类型,也即是doInBackground()的参数类型
第二个代表处理过程中的参数类型,传入onProgressUpdate()方法的参数类型,也就是doInBackground()执行过程中的产出参数类型,通过publishProgress()发消息传递给onProgressUpdate()一般用来更新界面
第三个代表任务结束的产出类型,也就是doInBackground()的返回值类型,和onPostExecute()的参数类型
* */
AsyncTask<String, Void, String> task = new AsyncTask<String, Void, String>() {
private StringBuffer sbBuffer;
// 这个方法运行在子线程中
protected String doInBackground(String... params) {
String path = params[0];
Log.i("myTag", "*******1111******" + path);
URL url;
try {
url = new URL(path);
HttpURLConnection connection = (HttpURLConnection) url
.openConnection();
connection.setRequestMethod("GET");
connection.connect();
Log.i("myTag", "*******2222******");
BufferedReader bReader = new BufferedReader(
new InputStreamReader(connection.getInputStream()));
sbBuffer = new StringBuffer();
String dataString = null;
Log.i("myTag", "*************");
while ((dataString = bReader.readLine()) != null) {
Log.i("myTag", "******3333*******");
sbBuffer.append(dataString);
Log.i("myTag", "*******44444******");
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return sbBuffer.toString();
}
// 下面这三个方法都是运行在主线程中
/**
* 此方法运行在主线程中,当任务执行时,此方法第一个被调用,通常做初始化操作
*
* 在执行耗时操作之前做一些准备工作(eg:弹窗),因为这个方法会首先执行
* */
protected void onPreExecute() {
super.onPreExecute();
}
/**
* 运行在主线程中,当任务执行完毕时,回调此方法 参数:doInBackground方法执行后返回的结果
* */
protected void onPostExecute(String result) {
super.onPostExecute(result);
//textView.setText(result);
}
};
AsyncTask<String, Void, Bitmap> task2 = new AsyncTask<String, Void, Bitmap>() {
private Bitmap bitmap;
/**
* 运行在子线程中,进行耗时操作 参数一:是一个可变参数,指定数据的url,此参数类型由AsyncTask的泛型一决定
* 返回值:将获取的数据返回给onPostExecute(Void result)方法
* */
protected Bitmap doInBackground(String... params) {
String path = params[0];
try {
URL url = new URL(path);
try {
HttpURLConnection connection = (HttpURLConnection) url
.openConnection();
connection.setRequestMethod("GET");
connection.connect();
bitmap = BitmapFactory.decodeStream(connection
.getInputStream());
} catch (IOException e) {
e.printStackTrace();
}
} catch (MalformedURLException e) {
e.printStackTrace();
}
return bitmap;
}
/**
* 此方法运行在主线程中,当任务执行时此方法第一个被调用,通常做一些初始化操作
* */
protected void onPreExecute() {
super.onPreExecute();
}
/**
* 运行在主线程中,当任务执行完毕时,回调此方法
*
* 这个方法参数的类型由doInBackground方法的返回值类型决定
* */
protected void onPostExecute(Bitmap result) {
super.onPostExecute(result);
imageView.setImageBitmap(result);
}
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
}
};
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button1);
textView = (TextView) findViewById(R.id.textView1);
imageView = (ImageView) findViewById(R.id.imageView1);
button.setOnClickListener(MainActivity.this);
}
public void onClick(View v) {
switch (R.id.button1) {
case R.id.button1:
String path = "http://v.juhe.cn/toutiao/index?type=yule&key=c8fe066ae002d20891fbc48a1783a1ee";
task.execute(path);
String path2 = "http://p4.so.qhmsg.com/t010a5748577f3d4e3e.jpg";
task2.execute(path2);
break;
}
}
}
AsyncTask(handler的封装类)
最新推荐文章于 2022-10-03 22:24:08 发布