2016-07-18 76 views
1

我從來沒有對Jsoup工作之前,現在我有一個項目,其中傢伙用JSoup lib和我需要做一些重構,使同樣的工作,但與retrofit2 ...轉換Jsoup請求retrofit2

我堅持轉換髮送圖像文件的請求。這裏是原來的JSoup要求:

Connection.Response result = Jsoup.connect(apiURL + "sendImg/") 
           .method(Connection.Method.POST) 
           .header("Token", XCSRFToken) 
           .data("source", currentImage.getMD5().concat(".jpg"), 
             new FileInputStream(bitmapURI.getPath())) 
           .execute(); 

這裏是我嘗試用改裝的事:

@Multipart 
    @POST("sendImg/") 
    Call<CbSendImage> sendImage(@Header("Token") String token, @Part MultipartBody.Part file); 

public void sendImage(File file) { 
     RequestBody requestFile = 
       RequestBody.create(MediaType.parse("multipart/form-data"), file); 
     MultipartBody.Part body = 
     MultipartBody.Part.createFormData("source", 
         currentImage.getMD5().concat(".jpg"), requestFile); 
     mSendImageCall = mServerApi.sendImage(getToken(), body); 
     mSendImageCall.enqueue(sendImageCallback); 
} 

但仍然請求失敗...

任何想法如何轉換該請求是否正確?謝謝!

回答

1

您可以創建自己的ConverterFactory並在其中使用JSOUP。

Retrofit retrofit = new Retrofit.Builder() 
      .baseUrl(HttpUrl.parse("https://www.x.x/x/")) 
      .addConverterFactory(PageAdapter.FACTORY) 
      .build(); 

static final class PageAdapter implements Converter<ResponseBody, SecondClass.Page> { 
    static final Converter.Factory FACTORY = new Converter.Factory() { 
     @Override 
     public Converter<ResponseBody, ?> responseBodyConverter(Type type, Annotation[] annotations, Retrofit retrofit) { 
      if (type == SecondClass.Page.class) return new SecondClass.PageAdapter(); 
      return null; 
     } 
    }; 

    @Override 
    public SecondClass.Page convert(ResponseBody responseBody) throws IOException { 
     Document document = Jsoup.parse(responseBody.string()); 
     Element value = document.select("script").get(1); 
     String content = value.html(); 
     return new SecondClass.Page(content); 
    } 
} 

欲瞭解更多信息或完整的例子,你可以參考這個link