Android Studio下使用Retrofit进行网络请求
环境要求
- Android 2.3及以上版本
- Java 6及以上版本
配置
- GRADLE配置文件下添加引用
dependencies {
...
compile ‘com.squareup.retrofit:retrofit:1.9.0‘
...
}
- 当OkHttp存在时,Retrofit会使用OkHttp来进行网络请求,使用OkHttp的添加引用如下
dependencies {
...
compile ‘com.squareup.okhttp:okhttp-urlconnection:2.0.0‘
compile ‘com.squareup.okhttp:okhttp:2.0.0‘
...
}
发起请求
下面的例子是使用Retrofit进行一次简单的异步GET请求,返回的值为String类型
首先定义一个接口,在接口中声明一个方法来定义请求的相关内容
interface User {
@GET("/user/list.json")
void getUsers(@Query("pagesize") int pagesize, Callback<String> callback);
}
@GET表明该请求为GET方式,除此之外还有@POST, @PUT, @DELETE, 和@HEAD,具体的作用请参考官方文档,由于篇幅原因,这里不再叙述。
@Query为参数声明
Callback< String > 为回调接口,String表明返回数据结果就为String类型
然后创建一个RestAdapter对象,代码如下
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(CTX).setConverter(new BaseConverter())
.build();
setEndpoint方法指定了请求地址的前半部分,即服务器地址,如 https://api.github.com
setConverter方法需要一个转换接口的实现类作为参数,该类的作用是将请求得到的InputStream转换为想要的类型,示例代码如下
public class BaseConverter implements Converter {
@Override
public Object fromBody(TypedInput body, Type type) throws ConversionException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int i = -1;
String response = "";
try {
while ((i = body.in().read()) != -1) {
baos.write(i);
}
response = baos.toString();
baos.close();
} catch (IOException e) {
e.printStackTrace();
}
return response;
}
@Override
public TypedOutput toBody(final Object object) {
return new TypedOutput() {
@Override
public String fileName() {
return null;
}
@Override
public String mimeType() {
return "String";
}
@Override
public long length() {
return object == null ? 0 : object.toString().length();
}
@Override
public void writeTo(OutputStream out) throws IOException {
out.write(object.toString().getBytes());
}
};
}
}
当得到了一个restAdapter 对象后,调用restAdapter的create方法得到User接口的实现类
Callback<String> callback = new Callback<String>() {
@Override
public void success(String s, Response response) {
}
@Override
public void failure(RetrofitError error) {
}
}
User user = getAdapter().create(User.class);
//指定请求参数和回调接口的实现类
user.getUsers(12,callback);
- Retrofit的强大之处就在于此,它会给根据接口的方法注解来实现该接口
代码混淆
如果需要进行代码混淆,配置如下
-dontwarn retrofit.**
-keep class retrofit.** { *; }
-keepattributes Signature
-keepattributes Exceptions
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。