How to POST data in Android to server in JSON format?

匿名 (未验证) 提交于 2019-12-03 01:29:01

问题:

I have this JSON string. I want to POST it to the server (i.e. using the POST method). How can this be done in Android?

JSON string:

{     "clientId": "ID:1234-1234",     "device": {         "userAgent": "myUA",         "capabilities": {             "sms": true,             "data": true,             "gps": true,             "keyValue": {                 "Key2": "MyValue2",                 "Key1": "myvalue1"             }         },         "screen": {             "width": 45,             "height": 32         },         "keyValue": {             "DevcKey2": "myValue2",             "DevcKey1": "myValue1"         }     },     "time": 1294617435368 } 

How can I form this JSON array and POST it to the server?

回答1:

I did it myself.

JSONObject returnedJObject= new JSONObject(); JSONObject KeyvalspairJObject=new JSONObject (); JSONObject devcKeyvalspairJObject=new JSONObject (); JSONObject capabilityJObject=new JSONObject(); JSONObject ScreenDimensionsJObject =new JSONObject(); JSONObject deviceJObject= new JSONObject(); try{     KeyvalspairJObject.put("key1","val1");     KeyvalspairJObject.put("key2","val2");     capabilityJObject.put("sms", false);     capabilityJObject.put("data", true);     capabilityJObject.put("gps", true);     capabilityJObject.put("wifi", true);     capabilityJObject.put("keyValue", KeyvalspairJObject);     ScreenDimensionsJObject.put("width", 45);     ScreenDimensionsJObject.put("height", 45);     devcKeyvalspairJObject.put("Devckey1","val1");     devcKeyvalspairJObject.put("DEVCkey2","val2");     deviceJObject.put("userAgent", "MYUserAgent");     deviceJObject.put("capabilities", capabilityJObject);     deviceJObject.put("screen", ScreenDimensionsJObject);     deviceJObject.put("keyValue", devcKeyvalspairJObject);      returnedJObject.put("clientId", "ID:1234-1234");     returnedJObject.put("carrier","TMobile");     returnedJObject.put("device",deviceJObject);     returnedJObject.put("time",1294617435);     returnedJObject.put("msisdn","1234567890");     returnedJObject.put("timezone","GMT"); } catch(JSONException e) { } 

and this is how we can send JSON data to server.

public String putDataToServer(String url,JSONObject returnedJObject) throws Throwable {     HttpPost request = new HttpPost(url);     JSONStringer json = new JSONStringer();     StringBuilder sb=new StringBuilder();       if (returnedJObject!=null)      {         Iterator itKeys = returnedJObject.keys();         if(itKeys.hasNext())             json.object();         while (itKeys.hasNext())          {             String k=itKeys.next();             json.key(k).value(returnedJObject.get(k));             Log.e("keys "+k,"value "+returnedJObject.get(k).toString());         }                  }     json.endObject();       StringEntity entity = new StringEntity(json.toString());                          entity.setContentType("application/json;charset=UTF-8");     entity.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,"application/json;charset=UTF-8"));     request.setHeader("Accept", "application/json");     request.setEntity(entity);       HttpResponse response =null;     DefaultHttpClient httpClient = new DefaultHttpClient();      HttpConnectionParams.setSoTimeout(httpClient.getParams(), Constants.ANDROID_CONNECTION_TIMEOUT*1000);      HttpConnectionParams.setConnectionTimeout(httpClient.getParams(),Constants.ANDROID_CONNECTION_TIMEOUT*1000);      try{         response = httpClient.execute(request);      }     catch(SocketException se)     {         Log.e("SocketException", se+"");         throw se;     }     InputStream in = response.getEntity().getContent();     BufferedReader reader = new BufferedReader(new InputStreamReader(in));     String line = null;     while((line = reader.readLine()) != null){         sb.append(line);     }     return sb.toString(); } 


回答2:

If you have JSON as String already, just POST it using regular HTTP connection (URL.openConnection()). No need to parse it or anything like that.



回答3:

Have a look at this code

https://gist.github.com/9457c486af9644cf6b18

See the retrieveJSONArray(ArrayList jsonArray,String[] key) and retrieveJSONString(ArrayList jsonObject)



回答4:

JSONObject returnedJObject= new JSONObject();  url = "http://49.50.76.75/website/exxx/api.php";  // makeSignupRequest();  try {     returnedJObject.put("email",eemail);     returnedJObject.put("password",passwrd);     returnedJObject.put("type","customer");     returnedJObject.put("method","register");     returnedJObject.put("username",usr);      try {         putDataToServer(url, returnedJObject);      }     catch (Throwable m) {         m.printStackTrace();     } } 


回答5:

IF this is anything other than a "Hobby" app with just one or two service calls to make, I'd consider looking at an async HTTP or REST library.

There are several worth consideration, including Volley from Google: https://developer.android.com/training/volley/index.html

and Retrofit from Square: http://square.github.io/retrofit

Volley is good general purpose async HTTP library, while Retrofit specifically concentrates on implementing a REST client.

Both of these libraries will handle much of the low-level detail that you're dealing with in your example.

Whether you continue to use your DefaultHttpClient code, or use Volley or Retrofit, you're definitely going to want to make sure that your network requests happen on a background thread so that you don't block the UI thread. It's not clear from your example whether you're doing that.



回答6:

you may also using Httpurlconnection please check link and you get more idea. or Httpsurlconnection



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!