在其他类使用时,
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;
}
@Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
httpUrl = 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 block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
publishProgress(100);
return result;
}
@Override
protected void onProgressUpdate(Integer... progress) {
// TODO Auto-generated method stub
updateProgressCallback.updatePogress(progress[0]);
}
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
if (result != null) {
if (successCallback != null) {
successCallback.onSuccess(result);
}
} else {
if (failCallback != null) {
failCallback.onFail();
}
}
}
private HttpClient GetHttpClient() {
// TODO Auto-generated method stub
HttpParams httpParams = new BasicHttpParams();
// setup timeout parameter and socket size
HttpConnectionParams.setConnectionTimeout(httpParams, 20 * 1000);
HttpConnectionParams.setSoTimeout(httpParams, 20 * 1000);
HttpConnectionParams.setSocketBufferSize(httpParams, 8196);// 8MB
// redirect HttpClientParams.setRedirecting(httpParams, true);
HttpClientParams.setRedirecting(httpParams, false);
// user agent
String 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 user
public interface FailCallback {
void onFail();
}
public interface SuccessCallback {
void onSuccess(String result);
}
public interface UpdateProgressCallback {
void updatePogress(int progress);
}
}