安卓核心技术高级——android-asyne-http组件

android-asyne-http

android-asyne-http是基于Apache HttpClient库之上的一个异步网络请求处理库,网络处理均基于Android的非UI线程,通过回调方法处理请求结果。
其主要特征如下:处理异步Http请求,并通过匿名内部类处理回调结果,Http异步请求均位于非UI线程,不会阻塞UI操作,通过线程池处理并发请求处理文件上传、下载,响应结果自动打包JSON格式,自动处理连接断开时请求重连。

安装android-asyne-http组件
在这里插入图片描述

发送一个异步请求

一定加权限

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEM"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

发送一个请求

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;

import com.example.vakwapplication.R;
import com.vorlonsoft.android.http.AsyncHttpClient;
import com.vorlonsoft.android.http.AsyncHttpResponseHandler;

import cz.msebera.android.httpclient.Header;

public class MainActivity2 extends AppCompatActivity {

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

    public void sendSimpleGetClick(View v){
        AsyncHttpClient client = new AsyncHttpClient();
        client.get("https://www.baidu.com", new AsyncHttpResponseHandler() {
            @Override
            public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
                //200 ok
                System.out.println(new String(responseBody));
            }

            @Override
            public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
                System.out.println("error"+new String(responseBody));
            }
        });
    }
}

在这里插入图片描述

发送一个带参数的请求

//发送一个带参数的请求
    public void sendParamsClick(View view){
        AsyncHttpClient client = new AsyncHttpClient();
        RequestParams params = new RequestParams();
        params.put("username","vince");
        params.put("password","123");
        client.post(this, "http://10.0.2.2:8080/HttpURL/LoginServlet", params, new AsyncHttpResponseHandler() {
            @Override
            public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
                System.out.println(new String(responseBody));
            }

            @Override
            public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
                System.out.println(new String(responseBody));
            }
        });
    }

在这里插入图片描述

上传文件

	public void uploadClick(View view){
        AsyncHttpClient client = new AsyncHttpClient();
        RequestParams params = new RequestParams();
        params.put("description","风景图片");
        //设置文件
        try {
            String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)+"/a.jpg";
            params.put("filename",new File(path),"image/jpeg");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        client.post(this, "http://10.0.2.2:8080/HttpURL/UploadServlet", params, new AsyncHttpResponseHandler() {
            @Override
            public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
                System.out.println(new String(responseBody));
            }

            @Override
            public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
                System.out.println(new String(responseBody));
            }
        });
    }

在这里插入图片描述

下载文件

//下载文件
    public void downloadClick(View view){
        AsyncHttpClient client = new AsyncHttpClient();
        String url = "http://i1.hexunimg.cn/2013-11-06/159411202.jpg";
        client.get(url, new FileAsyncHttpResponseHandler(this) {
            @Override
            public void onFailure(int statusCode, Header[] headers, Throwable throwable, File file) {
                //error
            }

            @Override
            public void onSuccess(int statusCode, Header[] headers, File file) {
                System.out.println(file.getAbsolutePath());
                String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)+"/159411202.jpg";
                try {
                    InputStream in = new FileInputStream(file);
                    OutputStream out = new FileOutputStream(path);
                    byte[] bytes = new byte[100];
                    int len = -1;
                    while ((len=in.read(bytes))!=-1){
                        out.write(bytes,0,len);
                        out.flush();
                    }
                    out.close();
                    in.close();
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                System.out.println("download complete");
            }
        });
    }

在这里插入图片描述

JSON请求

//json请求
    public void jsonClick(View view){
        AsyncHttpClient client = new AsyncHttpClient();
        String url = "http://10.0.2.2:8080/HttpURL/LoginServlet";
        JSONObject jsonObject = new JSONObject();
        try {
            jsonObject.put("username","vince");
            jsonObject.put("password","123");
            StringEntity entity = new StringEntity(jsonObject.toString());
            client.post(this,url,entity,"application/json",new JsonHttpResponseHandler(){
                @Override
                public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
                    super.onSuccess(statusCode, headers, response);
                    System.out.println(response.toString());
                }
            });
        } catch (JSONException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
    }

在这里插入图片描述

如何才能真正进阶为Android应用开发高手?必须深入理解Android核心技术的底层原理和在开发中总结并使用各种最佳实践,别无他法!深入Android应用开发:核心技术解析与最佳实践以Android的源代码为主,SDK为辅,针对应用开发者的需求,对各种核心技术的使用方法、底层原理和实现细节进行了深入而详细的讲解,同时辅之以大量案例和最佳实践,为开发者的进阶修炼和开发高质量的应用提供了绝佳指导。 第1章深入介绍了Android的4大核心组件和9大主要应用框架;第2章透彻讲解了资源、组件、事件处理、应用风格和数据适配等核心知识;第3章系统地展示了各种常用的UI控件的使用方法及原理,并对XML和Java这两种控件属性配置方式和适用场景进行了分析和比较;第4章深入阐述了Android的数据存储与管理;第5章分析了Android在UI层、框架层和内核层的通信机制和原理;第6章深入讲解了Android实现多线程的两种主要方式(原生Java线程和Android对Java线程的封装)的原理,并对它们进行了全方位比较;第7章深入介绍了Android网络编程的核心技术;第8章详细讲解了Android中的2D图像、3D图像、2D图形以及动画方面的知识;第9章全面介绍了Android的多媒体编程,包括音频、视频和Camera服务等,并对TTS的实现进行了剖析;第10章详细讲解了Android的跨语言调用;第11章深入剖析了Android的安全框架和安全机制;第12章针对商业应用的需要讲解了Android的调试、测试与性能优化;第13章全面地剖析了Android的编译系统,包括编译工具、映像文件编译、SDK编译、NDK编译和目标系统的配置等;第14章分析了Android系统的启动过程;第15章讲解了Android的系统管理原理,包含内存管理、应用管理、电源管理、系统管理,以及系统的还原、升级、配置和备份等多方面的内容,能帮助开发者从一个更高的视角去理解Android的运行机制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值