2013-02-08 50 views
0

我試圖執行GET請求到服務器,返回一個JSON文件。但是我在HTTP statusLine/422中發生錯誤。任何人都知道爲什麼。下面我展示我是如何做的錯誤在Android中的HTTP 422 GET

public void testConverteArquivoJsonEmObjetoJava() { 

    DefaultHttpClient httpClient = new DefaultHttpClient(); 
    HttpGet get = new HttpGet(
      "http://safe-sea-4024.ppooiheroku4554566adffasdfasdfalaqwerpcp.com/crimes/mobilelist"); 

    get.setHeader("Accept", "application/json"); 
    get.setHeader("Content-type", "application/json"); 

    get.getParams() 
      .setParameter("token", 
        "0V1AYFK12SeCZHYgXbNMew==$tRqPNplipDwtbD0vxWv6GPJIT6Yk5abwca3IJ88888a6JhMs="); 

    HttpResponse httpResponse; 
    try { 
     httpResponse = httpClient.execute(get); 
     String jsonDeResposta = EntityUtils.toString(httpResponse 
       .getEntity()); 

     System.out.println(); 

    } catch (ClientProtocolException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 
+0

HTTP狀態代碼表示無法處理的實體,這通常意味着你提供的數據不被服務器識別。您應該查閱API文檔以驗證呼叫需要哪些數據。另外,您是否包含在問題中的真實標記? – Perception

+0

你可以粘貼異常追蹤嗎? –

+0

是的,這個標記是有效的。但是服務器測試。 –

回答

1

通常你不指定Content-Type頭與GET請求。這個頭告訴服務器如何解釋消息中的實體包含。儘管GET不能包含正文,但服務器端可能期望使用JSON實體。嘗試刪除Content-Type標題。

我試過了你巧妙修改過的URL,並使其正常工作。但是,當我指定另一個令牌查詢參數時,我確實得到了422。由於狀態行缺少一個短語,我會假定Ruby應用程序正在生成它。

+0

您可以使用此URL進行測試[鏈接] http://safe-sea-4024.herokuapp.com/crimes/mobilelist 我刪除了標題並繼續出現錯誤。你認爲問題出在Ruby的服務器上嗎? –

0

我設法解決了這個問題。我傳遞的參數錯了。根據這篇文章[博客]:How to add parameters to a HTTP GET request in Android?「鏈接」。此方法用於給我那種POST請求的

這種方法是正確的

public void testConverteArquivoJsonEmObjetoJava() { 
    List<NameValuePair> params = new LinkedList<NameValuePair>(); 

    params.add(new BasicNameValuePair("token","0V1AYFK12SeCZHYgXbNMew==$=")); 

    String paramString = URLEncodedUtils.format(params, "utf-8"); 

    DefaultHttpClient httpClient = new DefaultHttpClient(); 
    HttpGet get = new HttpGet(
      "http://safep.com/crimes/mobilelist" + "?" 
        + paramString); 
    HttpResponse httpResponse; 
    try { 

     httpResponse = httpClient.execute(get); 
     String jsonDeResposta = EntityUtils.toString(httpResponse 
       .getEntity()); 

     System.out.println(); 

    } catch (ClientProtocolException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
}`