我正在使用Retrofit来调用API。我正在向API发送一个帖子请求但是在回调中我得到了像{}这样的空JSON。
以下是RetrofitService的代码
@POST("/com/searchusers.php")
void getUser(@Body JSONObject searchstring, Callback<JSONObject> callBack);
其中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);
}
});
我收到了这个输出 成功,结果:{}
预期产量是 成功,结果:{“name”:“nitesh”,......其余细节}
修改
我尝试使用Response代替JSONObject,就像这个CallBack<Response>
一样,然后我将原始响应转换为String,我得到了预期的结果。但问题是它在String中,我想要JSONObject中的响应。
如何使用CallBack<JSONObject>
...?
答案 0 :(得分: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();
}
}
然后我将此转换器设置为Application类中的RestAdapter。
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(BASE_URL)
.setConverter(new StringConverter())
.build();
mRetrofitService = restAdapter.create(RetrofitService.class);
现在每当我使用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);
}
});
因此,我以JSON形式获得了结果。然后我根据需要解析了这个JSON。
答案 1 :(得分:-3)
它可以帮到你
JSONObject responseJsonObj = new JSONObject(responseString);