Преобразовать запрос Jsoup в дооснащение2

android jsoup retrofit multipartform-data retrofit2

1208 просмотра

1 ответ

1365 Репутация автора

Я никогда раньше не работал с Jsoup, и теперь у меня есть проект, где ребята использовали JSoup lib, и мне нужно провести некоторый рефакторинг и выполнить ту же работу, но с 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);
}

но запрос все равно не удался ...

Любые идеи, как преобразовать этот запрос правильно? Спасибо!

Автор: Stan Malcolm Источник Размещён: 18.07.2016 12:52

Ответы (1)


1 плюс

1219 Репутация автора

Вы можете создать свой собственный 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);
    }
}

Для получения дополнительной информации или полного примера, вы можете обратиться к этой ссылке

Автор: Harish Gyanani Размещён: 24.11.2017 10:02
Вопросы из категории :
32x32