第三方开源库:android-async-http

参考:
Android框架学习笔记02AndroidAsycHttp框架
android AsyncHttp的简单使用与封装

官网:
android-async-http

简介

android-async-http是一种异步请求网络的方式,请求回调类有:JsonHttpResponseHandlerAsyncHttpResponseHandler,RequestParams采用put()或add()添加请求参数

相应的核心类的介绍:
(1).AsyncHttpResponseHandler:请求返回处理成功、失败、开始、完成等自定义的消息的类。
(2).BinaryHttpResponseHandler:AsyncHttpResponseHandler的子类。该类是一个字节流返回处理的类。用于处理图片等。返回数据类型是byte[]
(3).TextHttpResponseHandler返回数据类型是String,其实就是把BinaryHttpResponseHandler返回的byte[]转成了String返回给我们。它是一个抽象类,所以我们在new的时候,onSuccess()不会自动生成,需要我们重写该方法。
(4).JsonHttpResponseHandler:AsyncHttpResponseHandler的子类。这是一个服务器与客户端之间用Json数据交流时使用的类。客户端请求服务器的参数是Json数据类型的,服务器返回给客户端的数据也是Json数据类型的。返回数据类型是JsonObject或JsonArray。
其实就是把TextHttpResponseHandler返回的String转成了JsonObject/ObjectArray返回给我们。它是一个抽象类,所以我们在new的时候,onSuccess()不会自动生成,需要我们重写该方法。
所以重新onSuccess不能使用返回参数是String的那个方法。

(4).RequestParams:封装参数处理的类。将客户端请求的参数封装在该类中。
(5).AsyncHttpClient:异步客户端请求的类。
(6).SyncHttpClient:同步客户端请求的类。AsyncHttpClient的子类。

gradle

dependencies {
    ...
    compile 'com.loopj.android:android-async-http:1.4.9'
    ...
}

步骤:

  • 创建AsycnHttpClient对象
  • 创建RequestParams对象
  • 调用get()或post()

这里写图片描述

get请求

 String url = "http://192.168.1.11:8080/okhttp/json3";
AsyncHttpClient http = new AsyncHttpClient();
http.get(url, new JsonHttpResponseHandler() {
    @Override
    public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
        super.onSuccess(statusCode, headers, response);
        String result = response.toString();
        Logger.d("onSuccess=" + result);
    }

    @Override
    public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
        super.onFailure(statusCode, headers, responseString, throwable);
        Logger.d("onFailure=" + responseString);
    }
});

post请求

String url = "http://apicloud.mob.com/v1/mobile/address/query";
AsyncHttpClient http = new AsyncHttpClient();
RequestParams params = new RequestParams();
params.add("key", "1922d51a5257d");//put(...)可以刻传递参数
params.add("phone", "15153519007");//号码已作废

http.post(url, params, new AsyncHttpResponseHandler() {
    @Override
    public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
        String result = new String(responseBody);
        Logger.d("onSuccess=" + result);
    }

    @Override
    public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
        String result = responseBody.toString();
        Logger.d("onFailure=" + result);
    }
});

下载文件

dialog = new ProgressDialog(context);
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
dialog.setCancelable(false);
String url = "http://192.168.1.11:8080/QQ/QQ.apk";
AsyncHttpClient http = new AsyncHttpClient();
http.get(url, new AsyncHttpResponseHandler() {
    @Override
    public void onStart() {
        super.onStart();
        dialog.setTitle("提示信息");
        dialog.setMessage("下载中...");
        dialog.show();
    }

    @Override
    public void onProgress(final long bytesWritten, final long totalSize) {
        super.onProgress(bytesWritten, totalSize);
        dialog.setMax((int) totalSize);
        dialog.setProgress((int) bytesWritten);
    }

    @Override
    public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
        dialog.dismiss();
        Logger.d("onFailure=下载成功");
    }

    @Override
    public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
        String result = responseBody.toString();
        dialog.dismiss();
        Logger.d("onFailure=下载失败");
    }
});

上传文件

String url = "http://192.168.1.11:8080/okhttp/json3";
AsyncHttpClient http = new AsyncHttpClient();
RequestParams params = new RequestParams();
File file = new File("/mnt/sdcard0/qq.apk");
try {
    params.put("file", file);
    http.get(url,  new JsonHttpResponseHandler() {
        @Override
        public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
            super.onSuccess(statusCode, headers, response);
            Logger.d("上传成功");
        }

        @Override
        public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
            super.onFailure(statusCode, headers, responseString, throwable);
            Logger.d("上传失败");
        }
    });
} catch (FileNotFoundException e) {
    e.printStackTrace();
}

其他方法

清空所有的请求

public static void cancelAllRequests() {
    client.cancelAllRequests(true);
}

官方推荐写法

将get和post请求写成静态方法

import com.loopj.android.http.*;

public class TwitterRestClient {
  private static final String BASE_URL = "https://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;
  }
}

自己修改的

public class AppRestClient {

    private static final String BASE_URL = StringConstant.BASE_URL;

    private static AsyncHttpClient client = new AsyncHttpClient();

    /**
     * 无参
     */
    public static void getBytes(String url, AsyncHttpResponseHandler responseHandler) {
        client.get(getAbsoluteUrl(url), responseHandler);
    }

    public static void postBytes(String url, AsyncHttpResponseHandler responseHandler) {
        client.post(getAbsoluteUrl(url), responseHandler);
    }

    public static void getJson(String url, JsonHttpResponseHandler responseHandler) {
        client.get(getAbsoluteUrl(url), responseHandler);
    }

    public static void postJson(String url, JsonHttpResponseHandler responseHandler) {
        client.post(getAbsoluteUrl(url), responseHandler);
    }

    /**
     * 有参
     */
    // AsyncHttpResponseHandler
    public static void getBytes(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {
        client.get(getAbsoluteUrl(url), params, responseHandler);
    }

    public static void postBytes(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {
        client.post(getAbsoluteUrl(url), params, responseHandler);
    }

    //JsonHttpResponseHandler
    public static void getJson(String url, RequestParams params, JsonHttpResponseHandler responseHandler) {
        client.get(getAbsoluteUrl(url), params, responseHandler);
    }

    public static void postJson(String url, RequestParams params, JsonHttpResponseHandler responseHandler) {
        client.post(getAbsoluteUrl(url), params, responseHandler);
    }

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

网络请求框架(一):android-async-http
网络请求框架(二):xUtils
网络请求框架(三):Volley

Volley的使用(一):get+post
Volley的使用(二):加载网络图片
Volley的使用(三):Volley与Activity的联动 + Volley的二次封装

网络请求框架(四):OkHttp

网络请求框架(五):Retrofit

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值