使用AsyncHttp访问网络,获取数据,讲解与实例

什么是AsyncHttp

是github上的一个插件,用于获取网络数据,功能与HttpUrlConnection功能类似

本篇文章是对github文档中的信息进行翻译和补充。

github文档链接
使用AsyncHttp访问网络,获取数据,讲解与实例_第1张图片

我将从这里进行翻译:Make a Static Http Client:创建一个静态的方法(可以实现代码的复用),在之前需要导入依赖包,可以看我圈出来的之前的代码,相信你可以看懂的。

下面我们就是用AsyncHttp来实现访问网络数据:

效果展现

代码实现:
1.创建一个类,自定义一个public static修饰的方法
//创建一个公共类
public class HttpUtil {
    //将一个网址的不变部分先进行定义,一个传URL时只需要传变的部分
    private static final String basicUrl = "http://103.244.59.105:8014/paopaoserver/";
    //创建AsyncHttpClient对象
    private  static AsyncHttpClient client = new AsyncHttpClient();
    //创建方法进行申请访问网络,同时在最后调用回调方法
    public  static void get(String url, RequestParams params, AsyncHttpResponseHandler asyncHttpResponseHandler){
        client.get(getAbsulateUrl(url),params,asyncHttpResponseHandler);
    }
    //此方法用于将网址的不变部分+URL变的部分
    private static String getAbsulateUrl(String relativeUrl){
        return basicUrl+relativeUrl;

    }
}
2.在需要访问网络是,调用get方法,实现回调方法
public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Button showBtn;
    private String TAG = "MainActivity";


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

        bangID();
    }

    private void bangID() {
        showBtn = findViewById(R.id.main_show_btn);

        showBtn.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.main_show_btn:
                //创建AsyncHttpClient对象
                AsyncHttpClient client = new AsyncHttpClient();
                //调用get方法
                client.get("https://www.csdn.net/", new TextHttpResponseHandler() {
                    @Override
                    public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
                        Toast.makeText(MainActivity.this, "访问网络失败", Toast.LENGTH_SHORT).show();

                    }

                    @Override
                    public void onSuccess(int statusCode, Header[] headers, String responseString) {
                        //成功
                        //Log.e(TAG, "onSuccess: "+responseString );
                        Toast.makeText(MainActivity.this, responseString, Toast.LENGTH_SHORT).show();
                    }
                });
                //另一种启动网络的方式
                //创建RequestParams对象
//                RequestParams requestParams = new RequestParams();
                //将参数和值以键值对的形式放入requestParams中
//                requestParams.put("params","{\"classify_id\":70,\"page\":1,\"page_count\":2}");
//                //启动
//                HttpUtil.get("categorylist",requestParams, new TextHttpResponseHandler() {
//                    @Override
//                    public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
//                        Toast.makeText(MainActivity.this, "failture", Toast.LENGTH_SHORT).show();
//                    }
//
//                    @Override
//                    public void onSuccess(int statusCode, Header[] headers, String responseString) {
//                        Log.e(TAG, "onSuccess: "+responseString );
//                        Toast.makeText(MainActivity.this, "success", Toast.LENGTH_SHORT).show();
//
//                    }
//                });

                break;
            default:
        }

    }
}

补充:可以看到,我们在发送请求时,使用的是get方法,参数是以键值对的形式发送的,那么下面我将讲解如何使用post方法传递json数据;

1.在我们创建静态方法类中添加post()方法
//创建一个公共类
public class HttpUtil {
    //将一个网址的不变部分先进行定义,一个传URL时只需要传变的部分
    private static final String basicUrl = "http://103.244.59.105:8014/paopaoserver/";
    //创建AsyncHttpClient对象
    private  static AsyncHttpClient client = new AsyncHttpClient();
    //创建方法进行申请访问网络,同时在最后调用回调方法
    public  static void get(String url, RequestParams params, AsyncHttpResponseHandler asyncHttpResponseHandler){
        client.get(getAbsulateUrl(url),params,asyncHttpResponseHandler);
    }
    //创建post方法
    public static void post(Context context, String url, HttpEntity entity, String contentType, AsyncHttpResponseHandler responseHandler) {
        client.post(context,url,entity,contentType,responseHandler);
    }
    //此方法用于将网址的不变部分+URL变的部分
    private static String getAbsulateUrl(String relativeUrl){
        return basicUrl+relativeUrl;

    }
}

2.在需要申请网络时,调用post方法

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Button showBtn;
    private String TAG = "MainActivity";


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

        bangID();
    }

    private void bangID() {
        showBtn = findViewById(R.id.main_show_btn);

        showBtn.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.main_show_btn:
                Intent intent = getIntent();
                String basicUrl = intent.getStringExtra("basicUrl");
                //创建JSONObject数组
                final JSONObject[] jsonObject = {new JSONObject()};
                try {
                    //通过给JSONObject数组的对象赋值,来传递json数据,可以添加多个
                    jsonObject[0].put("Blower",1);
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                //创建ByteArrayEntity对象
                ByteArrayEntity entity = null;
                try {
                    entity = new ByteArrayEntity(jsonObject[0].toString().getBytes("UTF-8"));
                    entity.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
                HttpUtil.post(MainActivity.this, basicUrl + "control", entity, "application/json", new TextHttpResponseHandler() {
                    @Override
                    public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {

                    }

                    @Override
                    public void onSuccess(int statusCode, Header[] headers, String responseString) {
                    }
                });


                break;
            default:
        }

    }
}

你可能感兴趣的:(Android,网络技术)