Retrofit:在android中向服务器发送POST请求

Nit*_*tri 6 post android json retrofit

我正在使用Retrofit来调用API.我正在向API发送一个帖子请求,但在回调中我得到像这样{}的空JSON.

下面是RetrofitService的代码

@POST("/com/searchusers.php")
void getUser(@Body JSONObject searchstring, Callback<JSONObject> callBack);
Run Code Online (Sandbox Code Playgroud)

searchstring JSON就像这样{"search":"nitesh"}.作为回应,我应该得到用户"nitesh"的细节.

以下是发送POST请求的代码

RetrofitService mRetrofitService = app.getRetrofitService();
    mRetrofitService.getUser(user, new Callback<JSONObject>() {

        @Override
        public void success(JSONObject result, Response arg1) {
            System.out.println("success, result: " + result);
        }

        @Override
        public void failure(RetrofitError error) {
            System.out.println("failure, error: " + error);
        }
    });
Run Code Online (Sandbox Code Playgroud)

我得到了这个输出成功,结果:{}

预期的输出是成功的,结果:{"name":"nitesh",......其余的细节}

编辑: 我尝试使用Response而不是像这样的JSONObject CallBack<Response>,然后我将原始响应转换为String,我得到了预期的结果.但问题是它在String中,我想要JSONObject中的响应.

如何使用CallBack<JSONObject>...... 得到确切的结果?

Nit*_*tri 8

在等待最佳回复后,我想回答我自己的问题.这就是我解决问题的方法.

我更改了RetrofitService的RestAdapter的转换器并创建了我自己的Converter.下面是我的StringConverter

static class StringConverter implements Converter {

    @Override
    public Object fromBody(TypedInput typedInput, Type type) throws ConversionException {
        String text = null;
        try {
            text = fromStream(typedInput.in());
        } catch (IOException ignored) {/*NOP*/ }

        return text;
    }

    @Override
    public TypedOutput toBody(Object o) {
        return null;
    }

    public static String fromStream(InputStream in) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
        StringBuilder out = new StringBuilder();
        String newLine = System.getProperty("line.separator");
        String line;
        while ((line = reader.readLine()) != null) {
            out.append(line);
            out.append(newLine);
        }
        return out.toString();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我将此转换器设置为Application类中的RestAdapter.

RestAdapter restAdapter = new RestAdapter.Builder()
        .setEndpoint(BASE_URL)
        .setConverter(new StringConverter())
        .build();
    mRetrofitService = restAdapter.create(RetrofitService.class);
Run Code Online (Sandbox Code Playgroud)

现在每当我使用Retrofit时,我都会在String中得到响应.然后我转换了String JSONObject.

RetrofitService mRetrofitService = app.getRetrofitService();
mRetrofitService.getUser(user, new Callback<String>() {

    @Override
    public void success(String result, Response arg1) {
        System.out.println("success, result: " + result);
        JSONObject jsonObject = new JSONObject(result);
    }

    @Override
    public void failure(RetrofitError error) {
        System.out.println("failure, error: " + error);
    }
});
Run Code Online (Sandbox Code Playgroud)

因此,我得到了JSON格式的结果.然后我根据需要解析了这个JSON.