I'm getting an error on my response from Retrofit Expected BEGIN_ARRAY but was STRING at line 1 column 1 path $

让人想犯罪 __ 提交于 2019-12-20 05:52:19

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!