Retrofit 용법 상세 설명

20748 단어 webandriod
기초
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. 요청 방법 클래스
    번호
    명칭.
    1
    GET
    2
    POST
    3
    PUT
    4
    DELETE
    5
    PATCH
    6
    HEAD
    7
    OPTIONS
    8
    HTTP
  • 번호 1 ~ 7 은 각각 HTTP 요청 방법 에 대응 합 니 다.인터페이스 path 를 표시 하 는 문자열 을 받 고 baseUrl 과 완전한 Url 을 구성 합 니 다.지정 하지 않 고 @ Url 주석 과 결합 하여 사용 할 수 있 습 니 다.url 에 서 는 {id} 과 같은 변 수 를 사용 할 수 있 으 며, @ Path ("id") 를 사용 하여 {id} 에 값 을 제공 합 니 다.

  • 예 를 들다
    public interface BlogService{
        @GET("blog/{id}")
        Call getBlog(@Path("id") int id);
    }
  • 번호 8 은 상기 7 개 와 다른 확장 방법 을 대체 할 수 있다.3 개 속성: method, path, hasBody,
  • 예 를 들다
    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
    응답 체 의 데 이 터 를 흐름 으로 되 돌려 줍 니 다.
  • FormUrlEncoded 로그 인 페이지 사용: Content - Type: application / x - www - form - urlencoded
  • 멀 티 파 트 업로드 파일 사용: Content - Type: multipart / form - data
  • //     
    @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);
  • Streaming 은 방법 에 작용 하고 되 돌아 오 는 데이터 가 비교적 클 때 이 주 해 를 사용 해 야 한다.

  • 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 는 @ Headers 주석 을 사용 하여 고정된 요청 헤 더 를 설정 합 니 다. 모든 요청 헤 더 는 이름 이 같 더 라 도 서로 덮어 쓰 지 않 습 니 다.
  • @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);
  • Header 는 @ Header 를 사용 하여 동적 업데이트 요청 헤 더 를 설명 합 니 다. 일치 하 는 매개 변 수 는 @ Header 에 제공 해 야 합 니 다. 만약 매개 변수 가 null 이면 이 헤 더 는 생략 됩 니 다. 그렇지 않 으 면 매개 변수 값 의 toString 방법의 반환 값 을 사용 합 니 다.
  • @GET("user")
    Call getUser(@Header("Authorization") String authorization)
  • Body 는 @ Body 주 해 를 사용 하여 하나의 대상 을 request body 로 지정 합 니 다.
  • @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);
  • FieldMap
  • @FormUrlEncoded
    @POST("book/reviews")
    Call addReviews(@FieldMap Map fields);
  • Part
  • 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);
    }
  • PartMap
  •     @Multipart
        @POST("cyxx/Feedback/add.do")
        Observable getFeedbackResult(
                @PartMap Map params
        );
  • Path 요청 URL 은 모듈 을 동적 으로 변경 할 수 있 습 니 다. 교체 모듈 은 {} 에 포 함 된 알파벳 숫자 문자열 입 니 다. 교 체 된 매개 변 수 는 @ Path 주석 과 같은 문자열 을 사용 해 야 합 니 다.
  • //    http://baseurl/blog/id
    public interface BlogService{
        @GET("blog/{id}")
        Call getBlog(@Path("id") int id);
    }
  • Query 조회 파라미터
  • //    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);
    }
  • Query Map 의 복잡 한 조회 매개 변수
  • //    http://baseurl/blog/id?param1=Param1&param2=Param2...
    public interface BlogService{
        @GET("blog/{id}")
        Call getBlog(@Path("id") int id, @QueryMap Map options);
    }
  • Url 동적 URL 설정 은 Retrofit 2 를 사용 할 때 보통 하나의 baseURL 을 대상 으로 하고 다른 인 터 페 이 스 는 서로 다른 매개 변 수 를 연결 합 니 다. 예 를 들 어 get / photo, search? name = xiaohong & & & sex = female 등 형식 입 니 다.그러나 일부 요청 은 이때 서로 다른 url 에 접근 하여 Retrofit 2 인 스 턴 스 를 다시 만 들 수 있 고 실질 적 으로 처리 하 는 형식 도 있 습 니 다. 즉, @ url 주 해 를 사용 하 는 것 입 니 다.
  • 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

    좋은 웹페이지 즐겨찾기