网络请求框架(Ion)

本文介绍了Android网络请求框架Ion,它集成了网络请求和图片加载功能,支持链式API,自动取消活动结束时的请求,包含SPDY/HTTP2、缓存、Gzip等特性。文章详细讲解了Ion的使用步骤,包括添加依赖、权限设置,以及GET、POST请求,文件上传和下载的实现逻辑。

1, 介绍

 

* 它支持网络请求和进行图片加载的双重功能

* 拥有链式api风格(Fluent API)

* 当Activity结束的时候支持自动的取消操作

* 支持SPDY/HTTP2,缓存,Gzip压缩,HTTP连接的重用等

* 并且是基于AndroidAsync实现的,AndroidAsync是作者的另一个使用socket实现的,遵循http协议的类库

 

2,使用准备

【1】服务器准备

11,Tomcat 模拟网络请求资源

【2】添加依赖和权限

  • 添加依赖

compile 'com.koushikdutta.ion:ion:2.+'
  • 网络请求权限

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

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

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

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

【3】创建一个Text和Button,点击事件做对应的请求处理

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical"

    android:padding="20dp"

    tools:context="com.xiaoshuai.oslib96.activity.MainActivity">

    <Button

        android:id="@+id/btn"

        android:text="执行请求"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content" />

    <TextView

        android:id="@+id/tv_result"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:textColor="#000"

        android:textSize="20sp"/>

</LinearLayout>

3,实现逻辑:

【1】get请求

  • 接口文档

  • 获取对象

private void ionGet() {

    Ion.with(this)//获取单例对象

       .load(Api.TEST)//设置请求的url

       .asString()//设置期望解析的数据类型

       .setCallback(callback);

}
  • 返回结果监听

FutureCallback callback = new FutureCallback<String>() {

    @Override

    public void onCompleted(Exception e, String result) {

        tvResult.setText(e==null?result:e.getMessage());

    }

};
  • 可以设置期望的返回类型

 

【2】Post请求

  • 接口文档

  • 获取设置对象

    private void ionPost() {

        Ion.with(this)

           .load(AsyncHttpPost.METHOD,Api.LOGIN)

           //设置请求体参数

           .setBodyParameter("username","liudehua")

           .setBodyParameter("password","123321")

//           .asString()

           .as(User.class)  //可以返回一个javabean 的结构

           .setCallback(new FutureCallback<User>() {

               @Override

               public void onCompleted(Exception e, User result) {

                   tvResult.setText(e==null?result.toString():e.getMessage());

               }

           }) ;

    }
  • User,javabean 

public class User {

    public String username;

    public String usertoken;

    public String password;

    @Override

    public String toString() {

        return "User{" +

                "username='" + username + '\'' +

                ", usertoken='" + usertoken + '\'' +

                ", password='" + password + '\'' +

                '}';

    }

}

 

【3】 上传资源

  • 接口文档

  • 上传文件  file 是服务器需要返回的字段名字。

private void ionUpload() {

    File file = new File(Environment.getExternalStorageDirectory(),"a.jpg");

    Ion.with(this)

       .load(Api.UPLOAD)

       .setMultipartFile("file",file)//设置要上传的文件

       .asString()

       .setCallback(callback);

}
  • 返回结果打印

FutureCallback callback = new FutureCallback<String>() {

    @Override

    public void onCompleted(Exception e, String result) {

        tvResult.setText(e==null?result:e.getMessage());

    }

};

 

【4】批量上传文件

  • 接口文档

  • 可以设置多个文件进行上传

/**

* 批量上传文件

*/

private void ionUploadMulti() {

    File aFile = new File(Environment.getExternalStorageDirectory(),"a.jpg");

    File aaaFile = new File(Environment.getExternalStorageDirectory(),"aaa.jpg");

    Ion.with(this)

       .load(Api.UPLOAD_MULTI)

       .setMultipartFile("file",aFile)

       .setMultipartFile("file",aaaFile)

       .asString()

       .setCallback(callback);

}

返回状态回调

  •  
FutureCallback callback = new FutureCallback<String>() {

    @Override

    public void onCompleted(Exception e, String result) {

        tvResult.setText(e==null?result:e.getMessage());

    }

};

 

【5】下载

  • 接口文档

  • file是地址

private void ionDownload(){

    final File file = new File(Environment.getExternalStorageDirectory(),"b.jpg");

    Ion.with(this)

       .load(Api.IMAGE)

       .write(file)

       .setCallback(new FutureCallback<File>() {

           @Override

           public void onCompleted(Exception e, File result) {

               tvResult.setText("路径:"+file.getAbsolutePath());

           }

       });

}



 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兴帅_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值