可移植的Android异步任务AsyncTask类

来源:互联网 发布:vcr制作软件破解 编辑:程序博客网 时间:2024/06/03 17:25

在其他类使用时,

Go_AsyncTask mytask = new Go_AsyncTask mytask (); 

mytask.excute(url);获取网络返回的数据,进行解析即可。

 AsyncTask<String, Integer, String>{}参数的类型,Integer为进度,必须是大写的,不能写成int或者小写的integer。

 

package com.asynctest;import java.io.IOException;import org.apache.http.Header;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.client.params.HttpClientParams;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.params.BasicHttpParams;import org.apache.http.params.HttpConnectionParams;import org.apache.http.params.HttpParams;import org.apache.http.params.HttpProtocolParams;import org.apache.http.util.EntityUtils;import android.os.AsyncTask;import android.util.Log;/** *  * @author Ryan *  */public class Go_AsyncTask extends AsyncTask<String, Integer, String> {private String httpUrl;private SuccessCallback successCallback;private FailCallback failCallback;private UpdateProgressCallback updateProgressCallback;public Go_AsyncTask(SuccessCallback successCallback,FailCallback failCallback,UpdateProgressCallback updateProgressCallback) {this.successCallback = successCallback;this.failCallback = failCallback;this.updateProgressCallback = updateProgressCallback;}@Overrideprotected String doInBackground(String... params) {// TODO Auto-generated method stubhttpUrl = params[0];HttpClient httpClient = GetHttpClient();publishProgress(0);HttpGet httpGet = new HttpGet(httpUrl.replaceAll(" ", "%20"));String result = null;try {publishProgress(10);HttpResponse httpResponse = httpClient.execute(httpGet);publishProgress(60);int Code = httpResponse.getStatusLine().getStatusCode();switch (Code) {case 300:case 301:case 302:case 303:case 304:case 305:case 306:case 307:Header head = httpResponse.getFirstHeader("Location");result = head.getValue();Log.v("REDIRECTING LOCATION", result);Log.v("HTTPRESPONSE", getRes(httpResponse));break;case 200:publishProgress(80);result = EntityUtils.toString(httpResponse.getEntity());break;case 400:case 500:case 404:default:result = null;break;}} catch (ClientProtocolException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}publishProgress(100);return result;}@Overrideprotected void onProgressUpdate(Integer... progress) {// TODO Auto-generated method stubupdateProgressCallback.updatePogress(progress[0]);}@Overrideprotected void onPostExecute(String result) {// TODO Auto-generated method stubif (result != null) {if (successCallback != null) {successCallback.onSuccess(result);}} else {if (failCallback != null) {failCallback.onFail();}}}private HttpClient GetHttpClient() {// TODO Auto-generated method stubHttpParams httpParams = new BasicHttpParams();// setup timeout parameter and socket sizeHttpConnectionParams.setConnectionTimeout(httpParams, 20 * 1000);HttpConnectionParams.setSoTimeout(httpParams, 20 * 1000);HttpConnectionParams.setSocketBufferSize(httpParams, 8196);// 8MB// redirect HttpClientParams.setRedirecting(httpParams, true);HttpClientParams.setRedirecting(httpParams, false);// user agentString userAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2)Gecko/20100115Firefox/3.6";HttpProtocolParams.setUserAgent(httpParams, userAgent);HttpClient httpClient = new DefaultHttpClient(httpParams);return httpClient;}private String getRes(HttpResponse httpResponse) {Header[] headers = null;Header header = null;headers = httpResponse.getAllHeaders();StringBuffer sb = new StringBuffer();for (int i = 0; i < headers.length; i++) {header = headers[i];sb.append(header.getName() + ": " + header.getValue() + "\r\n");}return sb.toString();}//Interface for userpublic interface FailCallback {void onFail();}public interface SuccessCallback {void onSuccess(String result);}public interface UpdateProgressCallback {void updatePogress(int progress);}}


1 0
原创粉丝点击