2017-10-05 1 views
2

다른 라이브러리로 변경하려고 시도했지만 이미 성공을 거두고 다른 여러 가지 작업을 시도했지만 시도해 보겠습니다.Retrofit2 형식이 잘못되었습니다.

저는 3 개의 다른 URL에 2 개의 GET 및 2 개의 POST를 만드는 앱이 있습니다. 마지막으로 문제가 있습니다. 나는이 문제를 설명하기 전에 내가 이미 @FormUrlEncodedContent-Type와 (Call<ResponseBody>으로 무언가 Call<String>을 시도, 또는 @Field으로 페이로드를 보내는 것을 명확히하고자,

@Headers({ 
      "Accept: text/html", 
      "Accept-Encoding: gzip, deflate, br", 
      "Accept-Language: es-ES,es;q=0.8", 
      "Cache-Control: no-cache", 
      "Content-Type: application/x-www-form-urlencoded" 
    }) 
    @FormUrlEncoded 
    @POST("index.php?operacion=consulta") 
    Call<String> postRaiaSearch(@Header("Cookie") String cookie, @Field("microchip") String microchip); 

그리고 :

나는이 개조 POST 방법을 헤더는 application/x-www-form-urlencoded)이고 @BodyRequestBody입니다.

그러나 모든 것이 나에게 잘못된 형식의 응답을 제공합니다.

RAW : 구문 분석 enter image description here

: enter image description here

그리고 개조 나에게 주시는 몬스터 : 여기

은 멋지게 형식의 고급 REST 클라이언트 응답 본문의 샘플입니다

enter image description here

처음 보았 듯이, 웹은 JSON 대신 HTML을 반환하지만, 난 그냥 평범한 일반 텍스트로 얻을 수 있다고 생각했지만 잘 진행되지 않았다.

public static Retrofit getRaiaApi() { 
    if (raiaRetrofit == null) { 
     raiaRetrofit = new Retrofit.Builder() 
       .baseUrl(RAIA_URL) 
       .addConverterFactory(ScalarsConverterFactory.create()) 
       .build(); 
    } 
    return raiaRetrofit; 
} 

그리고 나는 또한 .addConverterFactory(GsonConverterFactory.create())를 추가하거나합니다 (GSON 일 만에) 스칼라 라인을 삭제, 또는 단지 모두 삭제 시도 :

당신이 궁금해 경우

이 내가 개조 개체를 만든 방법입니다 그들의.

난 당신이 정말 POST 메소드를 호출하는 것 방법을 필요가 있다고 생각하지 않지만, 어쨌든 붙여 넣기합니다

:

private void nextRaiaSearch(String header) { 
    callRaiaSearch = apiInterfaceRaia.postRaiaSearch(header, chipInput); 
    callRaiaSearch.enqueue(new Callback<String>() { 
     @Override 
     public void onResponse(Call<String> call, Response<String> response) { 
      Log.v("call", "onResponse"); 
      Log.v("call", response.body()); 
     } 

     @Override 
     public void onFailure(Call<String> call, Throwable t) { 
      Log.v("call", "onFailure"); 
     } 
    }); 
} 

난 그냥 이것에 대한 개조의 대신 발리 또는 어떤 다른 일이 뭔가를 시도해야 하나의 요청? 만든

수입품은 다음과 같습니다

compile 'com.google.code.gson:gson:2.8.2' 
compile 'com.squareup.retrofit2:retrofit:2.3.0' 
compile 'com.squareup.retrofit2:converter-gson:2.3.0' 
compile 'com.squareup.retrofit2:converter-scalars:2.3.0' 
+0

어떤 유형의 API를 사용하고 있습니까 (서버에 데이터를 보내거나 서버에서 데이터를 수신 할 수 있습니까). GET 또는 POST –

+0

POST이고 응답을 받기를 원합니다.하지만 주된 문제는 웹에 API를 사용하면 웹의 전체 HTML을 제공하므로 기꺼이 가져 가서 원하는 값을 추출 할 수 있지만 Android에서 제공하는 형식은 다이아몬드와 심문으로 가득합니다. – JMedinilla

+0

요청의 콘텐츠 유형을''Content-Type : text/plain''으로 설정하고 Gson 변환기를 추가하는 이유는 무엇입니까? "Content-Type : application/json"이되어서는 안되며, 이는 기본적으로 개장 된 것입니다. – Fred

답변

1

좋아, 내가 잡하였습니다 응답 혼란에 대한 해결책을 얻었다. 문제는 POST 방식의 헤더 중 하나 :

Accept-Encoding: gzip, deflate, br

내가 넣어 들었다 헤더하지만 텍스트를 압축 된 이후 나는 전혀 필요하지 않았다.지금은 단지 원시 고급 REST 클라이언트의 응답처럼, 정상적인 응답 답변을 얻을 :

enter image description here

문제는 이제 다른이며 내가 때문에, 개조 버퍼 ​​RO 더 크기를 제공하는 방법을 찾을 필요가 있어요 응답은 전체 HTML의 절반에도 불구하고 잘립니다. 그러나 그것은 또 다른 질문이며 달성하기 쉽습니다.

관련 문제