一、接口定义:
get 方法:
public interface ILoginService {
@GET("LoginDataServlet")
@Headers("Cache-Control: public, max-age=30")
Call<BaseResp<RegisterBean>> userLogin(@Query("username") String username, @Query("password") String password);
}
@GET("LoginDataServlet")
@Headers("Cache-Control: public, max-age=30")
Call<BaseResp<RegisterBean>> userLogin(@Query("username") String username, @Query("password") String password);
}
post方法:
@FormUrlEncoded
@POST("user/login.do")
Call<User> login(@Field("username") String userName, @Field("password") String password);
@POST("user/login.do")
Call<User> login(@Field("username") String userName, @Field("password") String password);
其中括号里定义的是接口地址,方法里的参数是要传的参数。
参数定义的格式有好几种,参考链接:
http://blog.csdn.net/qq_15602525/article/details/51543429
二、创建Retrofit:
在创建Retrofit之前,先配置拦截器在okhttpclient对象中,然后再配置转换器converter。如果不适用okhttp可以不用配置拦截器。(不要忘记配置接口的url)
mRetrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create(mGson))
.client(mOkHttpClient)
.build();
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create(mGson))
.client(mOkHttpClient)
.build();
三、使用:
首先创建service接口对象,就是第一步定义的对象,然后通过service对象得到一个call对象,接着通过call发出网络请求。
RequestSerives requestSerives = retrofit.create(RequestSerives.class);
Call<String> call = requestSerives.getString("userName", "1234"); //传入我们请求的键值对的值
Call<String> call = requestSerives.getString("userName", "1234"); //传入我们请求的键值对的值
call.enqueue(new Callback<String>() {
@Override
public void onResponse(Call<String> call, Response<String> response) {
Log.e("成功",response.body().toString());
}
@Override
public void onFailure(Call<String> call, Throwable t) {
Log.e("失败","失败");
}
});
@Override
public void onResponse(Call<String> call, Response<String> response) {
Log.e("成功",response.body().toString());
}
@Override
public void onFailure(Call<String> call, Throwable t) {
Log.e("失败","失败");
}
});
Retrofit的整个使用过程就是这样,当然你也可以进行封装。Retrofit结合着okhttp、RxJava使用起来会更好!
若是想更好地理解Retrofit请阅读以下文章(链接):
http://blog.csdn.net/Iamzgx/article/details/51607387(里面有一个dome写的很好!)