zoukankan      html  css  js  c++  java
  • 安卓网络请求框架androidasynchttp的使用

    在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));
               }
           });
    
        }
    
    
    }
  • 相关阅读:
    C# 杨辉三角 下
    C# 自动走迷宫 下
    算法练习之1数字填充 下
    动态添加控件并获取其值
    两个ListBox的互动
    VS2005常用快捷键
    GridView内嵌DropDownList操作
    GridView格式化短日期
    获得客户端ID
    Access数据库 Update 语句的怪现象
  • 原文地址:https://www.cnblogs.com/lyd447113735/p/8574089.html
Copyright © 2011-2022 走看看