1.准备:
Gradle配置文件
dependencies {
...
compile 'com.squareup.retrofit:retrofit:1.9.0'
...
}
2.给出一个用retrofit分别进行get和post网络请求的代码例子
2.1定义一个接口,在接口中声明一个方法来定义请求的相关内容。
public interface User {
@GET(Urls.URL_USER_ACCOUNTINFO)
void getAccountInfo(@QueryMap Map<String, String> a, Callback<JsonObject> callback);
@Multipart
@POST(Urls.URL_SAVE_PHOTO)
void postPhoto(@Part("photo") TypedFile photo, Callback<JsonObject> callback);
}
其中@GET.@POST表明该请求的方式,除此之外还有@DELETE@HEAD@PUT
其中@QueryMap为参数定义,Map<String,String> a,为定义的参数格式,但下文中不会使用变量a,所以在命名方面whatever
Callback<JsonObject> callback为回调接口,JsonObject表明返回数据接口为JsonObject类型。
这段代码可以概括为,定义了一个user接口,该接口定义了一个getAccountInfo函数,这个函数会通过HTTP GET请求去访问服务器的Urls.URL_USER_ACCOUNT(这个变量以及之后的PRE均在Urls文件中定义好)路径并把调用Callback方法将结果返回为一个JsonObject类型的java对象。
函数可以定义为同步和异步,具有返回值的函数为同步执行的。
@GET("/user/{id}/photo")
Photo listUsers(@Path("id") int id);
异步执行函数没有返回值并且要求函数最后一个参数为Callback对象,callback对象会在主线程中调用。
2.2创建一个RestAdapter对象
RestAdapter adapter=new RestAdapter.Builder()
.setEndpoint(Urls.PRE)
.build();
setEndPoint方法指定了请求地址的前半部分,即服务器的地址,如http://api.github.com
2.3得到了一个RestAdapter对象后,调用RestAdapter的create方法得到User接口的实现类
public static void method1(Map<String, String> map, final Context context) {
Callback<JsonObject> callback=new Callback<JsonObject>() {
@Override
public void success(JsonObject s, Response response) {
Toast.makeText(context,s.toString(),Toast.LENGTH_LONG ).show();
}
@Override
public void failure(RetrofitError error) {
Log.e("Tag","get failed again");
}
};
Request.User user=adapter.create(Request.User.class);
user.getAccountInfo(map,callback);
}
同理post请求
3在主线程中调用的时候
public void onClickGet(View view) {
Map<String,String> map= new HashMap<>();
map.put("ID","a7852cfb-9648-4213-8c08-26c5fe8dd8b6");
Request.method1(map,MainActivity.this);
}
retrofit官网:http://square.github.io/retrofit/