RoboSpice+Google HTTP客户端+GSON=无法将JSON解析为对象



我正在使用RoboSpice和Google HTTP客户端&GSON这边:

ApiSpiceServices:

public class ApiSpiceService extends GoogleHttpClientSpiceService {
    private static final int THREAD_COUNT = 3;
    @Override
    public CacheManager createCacheManager(Application application) throws CacheCreationException {
        CacheManager cacheManager = new CacheManager();
        GsonObjectPersisterFactory gsonObjectPersisterFactory = new GsonObjectPersisterFactory(application);
        cacheManager.addPersister(gsonObjectPersisterFactory);

        return cacheManager;
    }
    @Override
    public int getThreadCount() {
        return THREAD_COUNT;
    }
}

请求:

public class InfoRequest extends GoogleHttpClientSpiceRequest<Contact> {
    private final String url;
    public InfoRequest() {
        super(Contact.class);
        this.url = "some-url/path.json";
    }
    @Override
    public Contact loadDataFromNetwork() throws Exception {
        HttpTransport httpTransport = new NetHttpTransport();
        HttpRequestFactory httpRequestFactory = httpTransport.createRequestFactory(new InfoHttpRequestInitializer());
        HttpRequest httpRequest = httpRequestFactory.buildGetRequest(new GenericUrl(url));
        httpRequest.setParser(new GsonFactory().createJsonObjectParser());
        return httpRequest.execute().parseAs(Contact.class);
    }
    private class InfoHttpRequestInitializer implements HttpRequestInitializer {
        @Override
        public void initialize(HttpRequest request) throws IOException {
        }
    }
}

型号(Contact.java):

public class Contact {
    private String data;
}

基本活动:

public abstract class BaseActivity extends ActionBarActivity {
    protected SpiceManager spiceManager = new SpiceManager(ApiSpiceService.class);

    @Override
    protected void onStart() {
        super.onStart();
        spiceManager.start(this);
    }
    @Override
    protected void onStop() {
        spiceManager.shouldStop();
        super.onStop();
    }
}

和主要活动:

public class MainActivity extends BaseActivity {
   private InfoRequest infoRequest;
   @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        infoRequest = new InfoRequest();
    }
    @Override
    protected void onStart() {
        super.onStart();
        spiceManager.execute(infoRequest, "txt", DurationInMillis.ALWAYS_EXPIRED, new TextRequestListener());
    }
private class TextRequestListener implements RequestListener<Contact> {
        @Override
        public void onRequestFailure(SpiceException spiceException) {
           //
        }
        @Override
        public void onRequestSuccess(Contact s) {
            //
        }
    }

这似乎是有效的代码,但不幸的是,当它完成请求执行时,返回的Contact实例中的字段数据为null。logcat中没有错误。

请求的内容是100%有效的JSON。为什么它没有被解析?

好的,我找到了解决方案。我需要在模型中的字段中添加@Key注释。这很奇怪,因为纯粹的Gson不需要这个。

public class Contact {
    @Key
    private String data;
}

相关内容

  • 没有找到相关文章

最新更新