Asynctask异步处理类的使用

来源:互联网 发布:ubuntu怎么看内存 编辑:程序博客网 时间:2024/04/28 05:35
主类
package com.example.day08_asynctask;import java.util.concurrent.ExecutionException;import android.os.Bundle;import android.R.integer;import android.app.Activity;import android.view.Menu;import android.widget.ProgressBar;import android.widget.TextView;public class MainActivity extends Activity {TextView tv;TextView tv2;ProgressBar pb;String key = "3ac9f31ff66b9746539472887b3799c3";// 通过get请求时的接口地址String get_path = "http://web.juhe.cn:8080/constellation/getAll?consName=狮子座&type=today&key="+ key;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tv = (TextView) findViewById(R.id.textView1);tv2 = (TextView) findViewById(R.id.textView2);pb = (ProgressBar) findViewById(R.id.progressBar1);// 主页提供控件,和联网地址System.out.println("new 出对象");MyAsynctask myAsynctask = new MyAsynctask(tv, pb);System.out.println("执行extcte方法");// 执行完,这里先得到执行的结果,类中在得到myAsynctask.execute(get_path);try {String string = myAsynctask.get();System.out.println("主线程得到线程结束的数据:" + string);tv2.setText("主线程的设置" + string);} catch (InterruptedException e) {e.printStackTrace();} catch (ExecutionException e) {e.printStackTrace();}}}

线程类


package com.example.day08_asynctask;import java.io.BufferedReader;import java.io.IOException;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.client.ClientProtocolException;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpGet;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.util.EntityUtils;import android.os.AsyncTask;import android.os.SystemClock;import android.widget.ProgressBar;import android.widget.TextView;// 三个参数,1.线程执行前传入的数据类型 params 2.线程中更新的数据类型 3.线程执行后的结果类型public class MyAsynctask extends AsyncTask<String, Integer, String> {TextView tv;ProgressBar pb;String path = "";private BufferedReader br;private StringBuffer sb;private String str;public MyAsynctask(TextView tv, ProgressBar pb) {super();this.tv = tv;this.pb = pb;}// 开启后台线程@Overrideprotected String doInBackground(String... params) {System.out.println("正式开启线程,得到传来的数据" + params[0]);HttpClient httpClient = new DefaultHttpClient();HttpGet httpGet = new HttpGet(params[0]);try {HttpResponse httpResponse = httpClient.execute(httpGet);if (httpResponse.getStatusLine().getStatusCode() == 200) {HttpEntity entity = httpResponse.getEntity();str = EntityUtils.toString(entity);for (Integer i = 0; i < 100; i++) {SystemClock.sleep(200);publishProgress(i);}}} catch (ClientProtocolException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return str;}// 开始后台线程前执行@Overrideprotected void onPreExecute() {System.out.println("准备开启线程");super.onPreExecute();}@Overrideprotected void onPostExecute(String result) {System.out.println("子类线程得到结果数据:" + result);tv.setText("任务类设置的信息" + str);super.onPostExecute(result);}@Overrideprotected void onProgressUpdate(Integer... values) {System.out.println("线程执行中得到传来的数据" + values[0]);tv.setText(values[0] + "%");super.onProgressUpdate(values);}}


0 0