1, 介绍
-
GitHub地址:https://github.com/koush/ion
* 它支持网络请求和进行图片加载的双重功能
* 拥有链式api风格(Fluent API)
* 当Activity结束的时候支持自动的取消操作
* 支持SPDY/HTTP2,缓存,Gzip压缩,HTTP连接的重用等
* 并且是基于AndroidAsync实现的,AndroidAsync是作者的另一个使用socket实现的,遵循http协议的类库
2,使用准备
【1】服务器准备
【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());
}
});
}
本文介绍了Android网络请求框架Ion,它集成了网络请求和图片加载功能,支持链式API,自动取消活动结束时的请求,包含SPDY/HTTP2、缓存、Gzip等特性。文章详细讲解了Ion的使用步骤,包括添加依赖、权限设置,以及GET、POST请求,文件上传和下载的实现逻辑。
2507

被折叠的 条评论
为什么被折叠?



