2014-05-25 160 views
6

我正在使用Retrofit來調用API。我正在向API發送一個發佈請求,但在回調中,我得到了像這樣的空JSON。{}改造:發送POST請求到android中的服務器

下面是RetrofitService

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

的代碼中搜索字符串JSON是這樣{ 「搜索」: 「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); 
     } 
    }); 

我得到這個輸出 成功,結果代碼:{}

預計產量 成功,結果是:{ 「名」:「nitesh 」,...詳情其餘}

編輯: 我試着用響應代替的JSONObject這樣CallBack<Response>,然後我CONV將原始響應轉換爲String,並獲得預期結果。但問題是它在String中,我想要在JSONObject中的響應。

我怎樣才能得到確切的結果使用CallBack<JSONObject> ...?

回答

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(); 
    } 
} 

然後我將此轉換器設置爲應用程序類中的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。

+0

mRetrofitService.getUser(用戶,新的回調()和公共無效成功(字符串結果,響應ARG1)。無論是JSONObject的應該是字符串或字符串的結果應該是JSONObject的結果。我想你的代碼,發現這個 –

+0

我已經更正了代碼以使用'回調'而不是'回調'。 –

+0

我們如何在改進2.0版本中獲得字符串? – astuter

-3

它可以幫助你

JSONObject responseJsonObj = new JSONObject(responseString);