2015-06-08 49 views
0

我想將一些數據發佈到我的服務器,但我不知道爲什麼,我總是從它獲得400條消息。POST Android JSON數據

我要發這個帖子的結構:

POST /api/v0.1/observations/3 HTTP/1.1 
Host: 54.154.117.132` 
Content-Type: application/json 
Cache-Control: no-cache 

{ 
    "data" : 
    { 
     "field1" : 1111111 
    }, 
    "timestamp": "2015-05-13T12:23:42.648738" 
} 

如果我發送的捲曲或wget的,我得到一個200 HTTP狀態。

我在Android這樣做:

public void POST(String json) throws MalformedURLException { 

    int httpResult; 
    //URL url = new URL(getString(R.string.URL)); 
    URL url = new URL(getString(R.string.URL_test2)); 
    HttpURLConnection con; 

    JSONObject obj1 = new JSONObject(); 
    JSONObject obj2 = new JSONObject(); 

    try { 
     obj1.put("field1",222); 
     obj2.put("data", obj1); 
     obj2.put("timestamp", "2015-06-8T12:05:42.648738"); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 


    try { 
     con = (HttpURLConnection) url.openConnection(); 
     con.setDoOutput(true); 
     con.setRequestMethod("POST"); 
     con.setUseCaches(false); 
     con.setConnectTimeout(10000); 
     con.setReadTimeout(10000); 
     con.setRequestProperty("Content-Type","application/json"); 
     con.setRequestProperty("Host", "54.154.117.132"); 
     con.connect(); 

     OutputStreamWriter out = new OutputStreamWriter(con.getOutputStream()); 
     out.write(obj2.toString()); 
     out.close(); 

     httpResult = con.getResponseCode(); 
     Log.i("Request","--> "+httpResult); 
     if (httpResult == HttpURLConnection.HTTP_OK) Log.i("HTTP"," --> all ok"); 
     else Log.i("HTTP", " --> smthg wrong!"); 

    } catch (IOException e) { 
     Log.i("ERROR"," !!! Interrupcion a la hora de conectarse"); 
    } 
} 

我不知道這是否是完全相同的結構,這是我的結論,因爲使用鉻郵差,和捲曲或wget的,獲得200狀態。

有人可以幫助我嗎?

如果您想嘗試的URL位於頂部的POST方法。

+0

會發生什麼,如果你註釋掉 「con.connect();」 – Knossos

+0

你的json合成錯誤 –

+0

@JunedAhsan你爲什麼這麼說? Json是正確的,我在互聯網的某些網站上進行了驗證,如果您的意思是Android代碼上的那個,則名稱鍵或值不必與頂部的POST示例相同。 –

回答

1

添加您的PARAMS中的JSONObject象下面這樣:

JSONObject jsonObject = new JSONObject(); 
jsonObject .put("field", 222); 
     JSONObject mainObject = new JSONObject(); 
     try { 
      mainObject .put("data",jsonObject); 
      mainObject .put("timestamp","2015-05-13T12:23:42.648738"); 
     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

而在代碼改變這裏:

OutputStreamWriter out = new OutputStreamWriter(con.getOutputStream()); 
     out.write(mainObject.toString()); //change to mainObject from obj2 
     out.close(); 
+0

yeeees !!這樣可行!!你能告訴我不同​​嗎? –

+0

查看你的json字符串它的Object中有其他對象的數據,並且你只發送一個對象中的所有參數 – Pankaj

+0

另一個問題,如果我想發送一個像「loc」這樣的參數:[1.23,2.76]我怎麼做到這一點? ? –