android_HttpClient

来源:互联网 发布:网络推广收费骗局 编辑:程序博客网 时间:2024/06/10 23:39
Get方式请求数据

try{
    HttpClient hc = new DefaultHttpClient();//
默认属性
    HttpGet hg = new HttpGet("
http://www.google.com”);//HttpGet实例
    HttpResponse rp = hc.execute(hg);//
连接
    if(rp.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
    InputStream is = rp.getEntity().getContent();
     .....//
处理数据
    }
   }catch(IOEeception e){
   }

post方式请求数据

     HttpPost httpRequest = new HttpPost("http://www.google.com”) ;//HttpPost连接对象 
     List<NameValuePair> params = new ArrayList<NameValuePair>();//
要传递的Post参数  
     params.add(new BasicNameValuePair("par", "HttpClient_android_Post"));//
要传递的参数
     try{
      HttpEntity httpentity = new UrlEncodedFormEntity(params, "gb2312");//
设置字符集,Post需要设置所使用的字符集
      httpRequest.setEntity(httpentity);//
请求httpRequest
      HttpClient httpclient = new DefaultHttpClient();//
取得默认的HttpClient
      HttpResponse httpResponse = httpclient.execute(httpRequest);//
取得HttpResponse  
     if(httpResponse.getStatusLine().getStatusCode()== httpStatus.SC_OK){

//HttpStatus.SC_OK表示连接成功   
       String strResult = EntityUtils.toString(httpResponse.getEntity());//
取得返回的字符
      }else{
       //"
请求错误!"
      }
     }catch (Exception e){
  }    

android-async-http

最基本用法

AsyncHttpClient client = new AsyncHttpClient();

client.get("http://www.google.com", new AsyncHttpResponseHandler() {

    @Override

    public void onSuccess(String response) {

        System.out.println(response);

    }

});

主要类

AsyncHttpRequest

继承自Runnabler,被submit至线程池执行网络请求并发送start,success等消息

AsyncHttpResponseHandler

接收请求结果,一般重写onSuccess及onFailure接收请求成功或失败的消息,还有onStart,onFinish等消息

TextHttpResponseHandler

继承自AsyncHttpResponseHandler,只是重写了AsyncHttpResponseHandler的onSuccess和onFailure方法,将请求结果由byte数组转换为String

JsonHttpResponseHandler

继承自TextHttpResponseHandler,同样是重写onSuccess和onFailure方法,将请求结果由String转换为JSONObject或JSONArray

BaseJsonHttpResponseHandler

继承自TextHttpResponseHandler,是一个泛型类,提供了parseResponse方法,子类需要提供实现,将请求结果解析成需要的类型,子类可以灵活地使用解析方法,可以直接原始解析,使用gson等。

RequestParams

请求参数,可以添加普通的字符串参数,并可添加File,InputStream上传文件

AsyncHttpClient

核心类,使用HttpClient执行网络请求,提供了get,put,post,delete,head等请求方法,使用起来很简单,只需以url及RequestParams调用相应的方法即可,还可以选择性地传入Context,用于取消Content相关的请求,同时必须提供ResponseHandlerInterface(AsyncHttpResponseHandler继承自ResponseHandlerInterface)的实现类,一般为AsyncHttpResponseHandler的子类,AsyncHttpClient内部有一个线程池,当使用AsyncHttpClient执行网络请求时,最终都会调用sendRequest方法,在这个方法内部将请求参数封装成AsyncHttpRequest(继承自Runnable)交由内部的线程池执行。

SyncHttpClient

继承自AsyncHttpClient,同步执行网络请求,AsyncHttpClient把请求封装成AsyncHttpRequest后提交至线程池,SyncHttpClient把请求封装成AsyncHttpRequest后直接调用它的run方法。

请求流程

1.调用AsyncHttpClient的get或post等方法发起网络请求

2.所有的请求都走了sendRequest,在sendRequest中把请求封装为了AsyncHttpRequest,并添加到线程池执行

3.当请求被执行时(即AsyncHttpRequest的run方法),执行AsyncHttpRequest的makeRequestWithRetries方法执行实际的请求,当请求失败时可以重试。并在请求开始,结束,成功或失败时向请求时传的ResponseHandlerInterface实例发送消息

4.基本上使用的都是AsyncHttpResponseHandler的子类,调用其onStart,onSuccess等方法返回请求结果

官方文档建议使用(http://loopj.com/android-async-http/)

public class TwitterRestClient {    private static final String BASE_URL = "http://api.twitter.com/1/";    private static AsyncHttpClient client = new AsyncHttpClient();    public static void get(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {

        client.get(getAbsoluteUrl(url), params, responseHandler);

    }    public static void post(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {

        client.post(getAbsoluteUrl(url), params, responseHandler);

    }    private static String getAbsoluteUrl(String relativeUrl) {        return BASE_URL + relativeUrl;

    }

}

封装的方法建议都加上Context参数,以在Activity pause或stop时取消掉没用的请求。

0 0
原创粉丝点击