Retrofit 용법 상세 설명
1. 자바 형식의 HTTP API 인 터 페 이 스 를 정의 합 니 다.
public interface BlueService {
@GET("book/search")
Call getSearchBooks(@Query("q") String name,
@Query("tag") String tag, @Query("start") int start,
@Query("count") int count);
}
2. GitHubService 인터페이스 실현
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.douban.com/v2/")
.addConverterFactory(GsonConverterFactory.create())
.build();
BlueService service = retrofit.create(BlueService.class);
3. 부탁
Call call = mBlueService.getSearchBooks(" ", "", 0, 3);
BookSearchResponse response = call.execute().body();
call.enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response){
asyncText.setText(" : " + response.body().books.get(0).altTitle);
}
@Override
public void onFailure(Call call, Throwable t) {
}
});
2. 관련 가방 도입
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
주해
Retrofit 는 모두 22 개의 주석 으로 기능 에 따라 세 가지 로 나 뉜 다.
번호
명칭.
1
GET
2
POST
3
PUT
4
DELETE
5
PATCH
6
HEAD
7
OPTIONS
8
HTTP
예 를 들다
public interface BlogService{
@GET("blog/{id}")
Call getBlog(@Path("id") int id);
}
public interface BlogService{
/**
* Cmethod ,
* path
* hasBody
*/
@HTTP(method = "get", path = "blog/{id}", hasBody = false)
Call getBlog(@Path("id") int id);
}
2. 태그 클래스
분류 하 다.
명칭.
비고
폼 요청
FormUrlEncoded
요청 체 는 From 폼 입 니 다.
~~
Multipart
요청 체 는 파일 업 로드 를 지원 하 는 From 폼 입 니 다.
표기
Streaming
응답 체 의 데 이 터 를 흐름 으로 되 돌려 줍 니 다.
//
@Multipart
@POST("v1/create")
Call create(@Part("pictureName") RequestBody pictureName, @Part MultipartBody.Part picture
RequestBody pictureNameBody = RequestBody.create(MediaType.parse(AppConstants.CONTENT_TYPE_FILE), "pictureName");
File picture= new File(path);
RequestBody requestFile = RequestBody.create(MediaType.parse(AppConstants.CONTENT_TYPE_FILE), picture);
// MultipartBody.Part is used to send also the actual file name
MultipartBody.Part picturePart = MultipartBody.Part.createFormData("picture", picture.getName(), requestFile);
//
create(pictureNameBody, picturePart);
//
@Multipart
@POST("v1/create")
Call create(@Part("pictureName") RequestBody pictureName, @PartMap Map.create(MediaType.parse(AppConstants.CONTENT_TYPE_FILE), "pictureName");
File picture= new File(path);
RequestBody requestFile = RequestBody.create(MediaType.parse(AppConstants.CONTENT_TYPE_FILE), picture);
Map params = new HashMap<>();
params.put("picture\"; filename=\"" + picture.getName() + "", requestFile);
//
create(pictureNameBody, params);
3. 매개 변수 클래스
분류 하 다.
명칭.
비고
방법 에 작용 하 다
Headers
요청 헤더 추가
방법 매개 변수 (형 삼) 에 작용
Header
고정 되 지 않 은 헤더 추가
~~
Body
비 폼 요청 체
~~
Field
폼 필드, FieldMap, FormUrlEncoded 와 결합
~~
FieldMap
폼 필드, Field, FormUrlEncoded 와 일치 합 니 다.Map 형식 을 받 아들 이 고, String 형식 이 아 닌 toString () 방법 을 사용 합 니 다.
~~
Part
폼 필드, 파 트 맵 과 함께 파일 업로드 에 적합 합 니 다.
~~
PartMap
폼 필드, 파 트 와 함께 파일 업로드 에 적합 합 니 다.기본적으로 맵 형식 을 수락 합 니 다. RequestBody 가 아 닌 경우 컨버터 를 통 해 변환 합 니 다.
~~
Path
URL 에 사용
~~
Query
URL 에 사용
~~
QueryMap
URL 에 사용
~~
Url
URL 에 사용
주의:
1. Map 은 복잡 한 매개 변 수 를 조합 하 는 데 사용 합 니 다.
2. Query, Query Map 은 Field, FieldMap 기능 과 같이 생 성 된 데이터 형식 과 같 습 니 다.Query, Query Map 의 데 이 터 는 Url 에 나타 납 니 다.Field, FieldMap 의 데 이 터 는 요청 체 입 니 다.
3. {자리 차지 문자} 와 PATH 는 URL 의 path 부분 에 만 사용 하고 url 의 인 자 는 Query, Query Map 으로 대체 하여 인터페이스의 간결 함 을 확보 합 니 다.
4. Query, Field, Part 는 배열 을 지원 하고 Iterable 인터페이스 의 유형 을 실현 합 니 다. 예 를 들 어 List, Set 등 은 배경 에 배열 을 전달 하 는 데 편리 합 니 다. 예 를 들 어 다음 과 같 습 니 다.
Call foo(@Query("ids[]") List ids) ;
//
// ids[]=0&ids[]=1&ids=2
@Headers("Cache-Control: max-age=640000")
@GET("widget/list")
Call> widgetList();
@Headers({ "Accept: application/vnd.github.v3.full+json","User-Agent: Retrofit-Sample-App"})
@GET("users/{username}")Call getUser(@Path("username") String username);
@GET("user")
Call getUser(@Header("Authorization") String authorization)
@POST("users/new")
Call<User> createUser(@Body User user);
대상 은 Retrofit 인 스 턴 스 에서 지정 한 변환기 로 변 환 됩 니 다. 변환 기 를 추가 하지 않 으 면 RequestBody 만 사용 할 수 있 습 니 다. 다음 과 같 습 니 다.
@POST("users/new")
Call createUser(@Body User user);
--------------------------------------------------------------
@Headers({"Content-type:application/json;charset=UTF-8"})
@POST("/api/v1/trade/HasAccount.json")
Call createCommit(@Body RequestBody route);
Gson gson=new Gson();
HashMap paramsMap=newHashMap<>();
paramsMap.put("userId","173");
String strEntity = gson.toJson(paramsMap);
body = RequestBody.create(okhttp3.MediaType.parse("application/json;charset=UTF-8"),strEntity);
Call call = api.getService().createCommit(body);
@FormUrlEncoded
@POST("v1/login")
Call userLogin(@Field("phone") String phone, @Field("password") String password) ;
@FormUrlEncoded
@POST("book/reviews")
Call addReviews(@FieldMap Map fields) ;
public interface FileUploadService {
//
@Multipart
@POST("upload")
Call uploadFile(
@Part("description") RequestBody description,
@Part MultipartBody.Part file);
//
@Multipart
@POST("upload")
Call uploadMultipleFiles(
@Part("description") RequestBody description,
@Part MultipartBody.Part file1,
@Part MultipartBody.Part file2);
}
@Multipart
@POST("cyxx/Feedback/add.do")
Observable getFeedbackResult(
@PartMap Map params
) ;
// http://baseurl/blog/id
public interface BlogService{
@GET("blog/{id}")
Call getBlog(@Path("id") int id);
}
// http://baseurl/blog/id?sort=ShortStr
public interface BlogService{
@GET("blog/{id}")
Call getBlog(@Path("id") int id, @Query("sort") String sort);
}
//
public interface BlogService{
@GET("blog/{id}")
Call getBlog(@Path("id") int id, @Query("linked[]") String... linked);
}
// http://baseurl/blog/id?param1=Param1¶m2=Param2...
public interface BlogService{
@GET("blog/{id}")
Call getBlog(@Path("id") int id, @QueryMap Map options);
}
public interface UserService {
@GET
public Call profilePicture(@Url String url);
}
위의 @ url 은 받 을 수 있 습 니 다.https://s3.amazon.com/profile-picture/path사용
Retrofit retrofit = Retrofit.Builder()
.baseUrl("https://your.api.url/");
.build();
UserService service = retrofit.create(UserService.class);
service.profilePicture("https://s3.amazon.com/profile-picture/path");
// request url results in:
// https://s3.amazon.com/profile-picture/path
참고: 1.http://www.jianshu.com/p/bf884248cb37 2、http://blog.csdn.net/ysmintor_/article/details/70271680 3、http://blog.csdn.net/fanatic_/article/details/53066938 4、http://blog.csdn.net/itachi85/article/details/53007262 5、http://www.jianshu.com/p/308f3c54abdd 6、http://square.github.io/retrofit/ 7、http://blog.csdn.net/duanyy1990/article/details/52139294 8、http://www.jianshu.com/p/32bfd5fd8b48
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Portswigger의 연구실 작성: CSRF 토큰 보호를 사용한 기본 클릭재킹이 견습생 수준 실습에서는 일부 CSRF 토큰 보호가 있음에도 불구하고 클릭재킹에 취약한 웹사이트에서 계정 삭제 흐름을 악용합니다. 주어진 자격 증명으로 로그인하면 계정 페이지로 이동한 후 사용자 계정을 삭제하는 데...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.