更新时间:2016-04-11
A type-safe HTTP client for Android and Java
// Request.class
public interface XKCDRequest {
@GET("/info.0.json")
XKCDResponse getLatestXKCD();
}
// Response.class
public class XKCDResponse {
public int day;
public int month;
public int year;
public String img;
}
// MainActivity.class
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint("http://xkcd.com")
.build();
XKCDResponse service = restAdapter.create(XKCDRequest.class);
// 然后就能取到相应的数据了
// GitHubService.class
public interface GitHubService {
@GET("users/{user}/repos")
Call<List<Repo>> listRepos(@Path("user") String user);
}
// MainActivity.class
Retroft retrofit = new Retroft.Builder()
.baseUrl("https://api.github.com/")
.build();
GitHubService service = retrofit.create(GitHubService.class);
// 同步或异步地调用
Call<List<Repo>> repos = service.listRepos("octocat");
使用 annotation 描述 HTTP 请求
支持 GET
, POST
, PUT
, DELETE
, HEAD
等,使用相对路径
@GET("users/list")
@GET("users/list?sort=desc")
支持定义 URL 路径,使用 @Path
@GET(group/{id}/users)
Call<List<User>> groupList(@Path("id") int groupId);
另外还支持添加查询变量,使用 @Query
或 @QueryMap
@GET("group/{id}/users")
Call<List<User>> groupList(@Path("id") int groupId, @Query("sort") String sort);
// 对于复杂点的
@GET("group/{id}/users")
Call<List<User>> groupList(@Path("id") int groupId, @QueryMap Map<String, String> options);
支持编码过的表单和多部分,分别使用 @FormUriEncoded
和 @Multipart
@FormUriEncoded
@POST("user/edit")
// 每个键值对使用 @Field("keyname") value 形式
Call<User> updateUser(@Field("first_name") String first, @Field("last_name") String last);
@Multipart
@PUT("user/photo")
// 每个部分使用 @Part("name") value
Call<User> updateUser(@Part("photo") RequestBody photo, @Part("description") RequestBody description);
支持 Request Body,使用 @Body
@POST("users/new")
Call<User> createUser(@Body User user);
支持使用 @Headers
自定义静态 Header 和使用 @Header
动态添加
@Headers("Cache-Control: max-age=640000")
@GET("widget/list")
Call<List<Widget>> widgetList();
// 或
@Headers({
"Accept: application/vnd.github.v3.full+json",
"User-Agent: Retrofit-Sample-App"
})
@GET("users/{username}")
Call<User> getUser(@Path("username") String username);
// 动态添加
@GET("user")
Call<User> getUser(@Header("Authorization") String authorization);
默认情况下,Retrofit 会将响应的数据保存为 OkHttp 的 ResponseBody 类型。但也支持转换成
其他类型如:Gson
, Jackson
, Moshi
, Protobuf
, Wire
, Simple XML
, Scalars
举个栗子
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.github.com")
.addConverterFactory(GsonConverterFactory.create())
.build();
GitHubService service = retrofit.create(GitHubService.class);
A powerful image downloading and caching library for Android
Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);
自动检测重用的 adapter 和取消前一次下载
@Override public void getView(int position, View convertView, ViewGroup parent) {
SquaredImageView view = (SquaredImageView) convertView;
if (view == null) {
view = new SquaredImageView(context);
}
String url = getItem(position);
Picasso.with(context).load(url).into(view);
}
图像传输,另外也可以自定义,通过实现 Transformation 接口
Picasso.with(context)
.load(url)
.resize(50, 50)
.centerCrop()
.into(imageView)
显示缺省信息,当图像加载失败时有个提示作用
Picasso.with(context)
.load(url)
.placeholder(R.drawable.user_placeholder)
.error(R.drawable.user_placeholder_error)
.into(imageView);
支持从本地加载图像资源
Picasso.with(context).load(R.drawable.landing_screen).into(imageView1);
Picasso.with(context).load("file:///android_asset/DvpvklR.png").into(imageView2);
Picasso.with(context).load(new File(...)).into(imageView3);