安卓网络请求框架android-async-http的使用

在android studio中使用android-async-http框架时发现报错,错误是:org.apache.http.Header类找不到了。后来发现是Http Client在android 6.0 被移除了。官方文档的解决方案是:

If your app is using this client and targets Android 2.3 (API level 9) or higher, use the HttpURLConnection class instead. This API is more efficient because it reduces network use through transparent compression and response caching, and minimizes power consumption. To continue using the Apache HTTP APIs, you must first declare the following compile-time dependency in your build.gradle file: 

需要在app目录下的build.gradle中进行以下配置

android {
    useLibrary 'org.apache.http.legacy'
}

重建项目错误就消失了

 

 

初步使用步骤:


导入android-async-http框架的.jar包

有两种实现方式,get和post。两种方式的主要区别是参数传递的方式不同

 

package com.contentprovide.liuliu.async_demo_2;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;

import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.loopj.android.http.RequestParams;

import org.apache.http.Header;

public class MainActivity extends AppCompatActivity {

    //    声明一个请求客户端对象
    AsyncHttpClient client;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

//        实例化客户端对象
        client = new AsyncHttpClient();

//        async_Get();

          async_Post();

    }


    //Get请求方式的使用
    private void async_Get() {


        String url = "http://apis.juhe.cn/mobile/get?phone=13666666666&dtype=json&key=72a24be15b8b58c599d4d2f994e26cdb";

//        调用客户端对象的get方法进行网络请求并返回数据
        client.get(url, new AsyncHttpResponseHandler() {
            //            请求成功
            @Override
            public void onSuccess(int i, Header[] headers, byte[] bytes) {
                Toast.makeText(getApplicationContext(), new String(bytes), Toast.LENGTH_LONG).show();
            }

            //            请求失败
            @Override
            public void onFailure(int i, Header[] headers, byte[] bytes, Throwable throwable) {

            }
        });

    }


    //Post请求方式的使用
    private void async_Post() {

        String url = "http://apis.juhe.cn/mobile/get?";

        RequestParams params = new RequestParams();
        params.add("phone","13666666666");
        params.add("key","72a24be15b8b58c599d4d2f994e26cdb");

        client.post(url, params, new AsyncHttpResponseHandler() {
            @Override
            public void onSuccess(int i, Header[] headers, byte[] bytes) {
                Toast.makeText(getApplicationContext(),new String(bytes),Toast.LENGTH_LONG).show();
            }

            @Override
            public void onFailure(int i, Header[] headers, byte[] bytes, Throwable throwable) {

            }
        });
    }


}

 

 

android-async-http回调逻辑的二次封装

 

在正式项目中我们需要将这两种请求方式封装起来可以随时调用,还可以进行自定制 

步骤一:自定义一个类继承AsyncHttpResponseHandler类,重写AsyncHttpResponseHandler类中的Get和Post方法,以便可以在工具类中调用

package com.contentprovide.liuliu.async_demo_2;

import com.loopj.android.http.AsyncHttpResponseHandler;

import org.apache.http.Header;

/**
 * Created by liuliu on 2018/3/15.
 *
 * 创建一个类继承AsyncHttpResponseHandler类
 *
 */

public class NetCallBack extends AsyncHttpResponseHandler {

//重写父类中请求成功的方法
    @Override
    public void onSuccess(int i, Header[] headers, byte[] bytes) {

    }

//    重写父类中请求失败的方法
    @Override
    public void onFailure(int i, Header[] headers, byte[] bytes, Throwable throwable) {

    }
}

 

 

 

步骤二:自定义一个工具类,在里面声明网络请求的客户端对象以及创建自定义的Get和Post方法

package com.contentprovide.liuliu.async_demo_2;

import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.RequestParams;

/**
 * Created by liuliu on 2018/3/15.
 *
 * 创建一个工具类,存放网络请求的客户端对象和自定义的Get,Post方法
 *
 */

public class RequestUtils {

//    创建客户端对象
    public static AsyncHttpClient client = new AsyncHttpClient();


//    自定义Get请求方法
public static void ClientGet(String url, NetCallBack netCallBack){
    client.get(url,netCallBack);

}

//     自定义Post请求方法
public static void ClientPost(String url,RequestParams requestParams,NetCallBack netCallBack){
    client.post(url, requestParams, netCallBack);

}




}

 

 

接下来就可以在主类中直接调用这两个方法了

package com.contentprovide.liuliu.async_demo_2;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;

import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.RequestParams;

import org.apache.http.Header;

public class MainActivity extends AppCompatActivity {

    //    声明一个请求客户端对象
    AsyncHttpClient client;

    TextView mytext;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mytext = (TextView) findViewById(R.id.mytext);

//        实例化客户端对象
        client = new AsyncHttpClient();

//        async_Get();

        async_Post();

    }


    //Get请求方式的使用
    private void async_Get() {


        String url = "http://apis.juhe.cn/mobile/get?phone=13666666666&dtype=json&key=72a24be15b8b58c599d4d2f994e26cdb";

    RequestUtils.ClientGet(url,new NetCallBack(){
        @Override
        public void onSuccess(int i, Header[] headers, byte[] bytes) {
            super.onSuccess(i, headers, bytes);
            mytext.setText(new String(bytes));
        }
    });

    }


    //Post请求方式的使用
    private void async_Post() {

        String url = "http://apis.juhe.cn/mobile/get?";

        RequestParams params = new RequestParams();
        params.add("phone", "13666666666");
        params.add("key", "72a24be15b8b58c599d4d2f994e26cdb");

       RequestUtils.ClientPost(url,params,new NetCallBack(){
           @Override
           public void onSuccess(int i, Header[] headers, byte[] bytes) {
               super.onSuccess(i, headers, bytes);
               mytext.setText(new String(bytes));
           }
       });

    }


}

 

转载于:https://www.cnblogs.com/lyd447113735/p/8574089.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值