http://blog.csdn.net/jiguangcanhen/article/details/39006197git
同步的方式:github
1)首先定義要接口。註解Get表示使用的Get請求方式,{user}表明要被替換的數據json
public interface GitHubService {
@GET("/users/{user}/repos")
List<Repo> listRepos(@Path("user") String user);
}
2)初始化RestAdapter,並利用動態代理來建立的接口對象。api
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint("https://api.github.com")
.build();
GitHubService service = restAdapter.create(GitHubService.class);
3)使用網絡訪問並返回網絡
List<Repo> repos = service.listRepos("octocat");
異步的方式:app
@POST("/users/new")
void createUser(@Body User user, Callback<User> cb);
注:body註解,在進行請求前對象會被轉換器進行相應的數據轉換。異步
前兩部和以前的相同,不一樣在於最後一個參數變成了CallBack對象。ide
controller.getLogin(mail, password, new Callback<UserDataModel>() {ui
@Overrideurl
public void failure(RetrofitError error) {
// TODO Auto-generated method stub
}
@Override
public void success(UserDataModel ldm, Response response) {
// TODO Auto-generated method stub
});
能夠看到當請求網絡返回以後,會在failure中和success中進行回調,並且默認的數據轉換器會把相應的json字符串轉換爲對象。(固然,咱們也能夠定義本身的數據轉換器)
定義本身的數據轉換器:
public class MyConverter implements Converter {
@Override
public Object fromBody(TypedInput body, Type type) throws ConversionException {
StringBuffer result = new StringBuffer();
try {
InputStream is = body.in();
byte[] buffer = new byte[1024];
while(is.read(buffer) != -1){
result.append(new String(buffer,"UTF-8"));
}
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
@Override
public TypedOutput toBody(Objectobject) {
return null;
}
}
上面的自定義數據轉換器,會在請求成功以後,返回給咱們字符串,而不是相應的被gson轉換過格式的字符串。
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(「url」)
.setConverter(new MyConverter())
.build();
在建立RestAdapter以後建立設置使用本身的數據轉換器就能夠了。
咱們還能夠靈活的進行其餘的配置:
1)設置請求攔截器,會在請求發出前,進行攔截。
RequestInterceptor requestInterceptor = new RequestInterceptor() {
@Override
public void intercept(RequestFacade request) {
request.addHeader("User-Agent", "Retrofit-Sample-App");
}
};
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint("https://api.github.com")
.setRequestInterceptor(requestInterceptor)
.build();
2)設置錯誤控制器
class MyErrorHandler implements ErrorHandler {
@Override public Throwable handleError(RetrofitError cause) {
Response r = cause.getResponse();
if (r != null && r.getStatus() == 401) {
return new UnauthorizedException(cause);
}
return cause;
}
}
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint("https://api.github.com")
.setErrorHandler(new MyErrorHandler())
.build();
3)設置log日誌。
RestAdapter restAdapter = new RestAdapter.Builder()
.setLogLevel(RestAdapter.LogLevel.FULL)
.setEndpoint("https://api.github.com")
.build();
上面只是簡單介紹了它的使用,其實它還有不少的功能,Get,Post,Put,Delete,Head……具體請參見官方網址。