2014-12-25 2 views
0

몇 가지 답을 살펴 봤는데 뭔가 빠졌습니다. 또한 Retrofit을 처리하기 전에 데이터를 볼 수있는 방법이 있습니까?

여기

public void getMemberHostData() { 
    MemberLoader loader = new MemberLoader(this, memberInterfaceService); 

    RetrofitLoaderManager.init(getLoaderManager(), 0, loader, this); 
} 

static class MemberLoader extends RetrofitLoader<List<MemberPOJO>, MembersInterface> { 

    public MemberLoader(Context context, MembersInterface service) { 

     super(context, service); 
    } 



    RestAdapter.Builder builder= new RestAdapter.Builder() 
      .setRequestInterceptor(new RequestInterceptor() { 
       @Override 
       public void intercept(RequestFacade request) { 
        request.addHeader("Accept", "application/json;versions=1"); 
        request.addHeader("authorization",getAuthorization(getContext())); 

       } 
      }); 

    @Override 
    public List<MemberPOJO> call(MembersInterface service) { 

     return service.listOfMemebers(); 
    } 
} 
+1

를 얻을, fromBody() 방법 내부 JSON이 유효한지 검증하기 위해 시도 할 수 있습니다 유효한 JSON이거나 응답 객체와 일치하지 않습니다. Charles와 같은 타사 도구를 사용하여 네트워크 트래픽을 스누핑하거나 Retrofit 예외에 응답 본문이 있다고 생각합니다. –

+0

RestAdapter의 로그 수준을 full로 설정하여 HTTP 요청과 응답 (본문 포함) 모두를 볼 수 있습니다. –

+0

Kool. 내 배짱이 너에게 나 한테 말하는거야. 문자열을 다시 가져 오거나 응답 만 되돌릴 수있는 방법이 있습니까? –

답변

3

당신이 StringConverterStringTypedOutput이있는 경우 문자열을 뽑을 수 ... 코드

extends Activity implements Callback<List<MemberPOJO>> { 

@Inject 
MembersInterface memberInterfaceService; 

@Override 
public void onFailure(Exception ex) { 

    setProgressBarIndeterminateVisibility(false); 

    String retrofitError = "Error: " + ex.getMessage(); 

    Log.e("LoadActivity", retrofitError); 
} 

@Override 
public void onSuccess(List<MemberPOJO> result) { 

    ArrayList<String> strings = new ArrayList<String>(result.size()); 

    Log.e("LoadActivity", "MemberPOJO:" + result); 

} 

입니다. 이렇게하면 일반 문자열이 전달되고 아무 것도 deserialize하지 않습니다. 그 다음 단지 직렬화 (GsonConverter로 확장)을 계속 유효한지 물론 당신은 당신의 응답이 중 하나없는 것처럼 그렇지 않으면 단지 그것은 소리 Response

public class StringConverter implements Converter { 

    @Override 
    public Object fromBody(TypedInput arg0, Type arg1) 
      throws ConversionException { 

     return getStringFromInputStream(arg0.in()); 
    } 

    @Override 
    public TypedOutput toBody(Object arg0) { 
     String string = (String) arg0; 
     return new StringTypedOutput(string.getBytes(Charset.forName(HTTP.UTF_8))); 
    } 


    public static String getStringFromInputStream(InputStream is) { 

    BufferedReader br = null; 
    StringBuilder sb = new StringBuilder(); 

    String line; 
    try { 

     br = new BufferedReader(new InputStreamReader(is)); 
     while ((line = br.readLine()) != null) { 
      sb.append(line); 
     } 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     //close the stream if needed. 
    } 

    return sb.toString(); 

} 
} 
+0

나중에 시도해보십시오. –

관련 문제