问题
I've looked at several answers, I'm missing something. Also is there a way to see the data prior to Retrofit handling it?
Here's the code
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);
}
...
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:
You can pull string if you have StringConverter and StringTypedOutput. This will deliver plain string and it won't deserialize anything. Of course you can try to validate if JSON is valid inside fromBody() method, if it is valid then just proceed with deserialization (extends it to GsonConverter), otherwise just get the 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();
}
}
来源:https://stackoverflow.com/questions/27649881/im-getting-an-error-on-my-response-from-retrofit-expected-begin-array-but-was-s