如何通过Android的请求发送JSON对象?
我想将以下JSON
文本{"Email":"aaa@tbbb.com","Password":"123456"}
发送到Web服务并阅读响应。 我知道如何阅读JSON
。 问题是上面的JSON
对象必须以variables名jason
发送。
我怎样才能做到这一点从android? 什么是创build请求对象,设置内容标题等步骤
Android没有用于发送和接收HTTP的特殊代码,您可以使用标准的Java代码。 我build议使用Android自带的Apache HTTP客户端。 以下是我用来发送HTTP POST的代码片段。
我不明白在一个名为“jason”的variables中发送对象与什么有关。 如果你不确定服务器到底需要什么,可以考虑编写一个testing程序,把各种string发送到服务器,直到你知道它需要的格式。
int TIMEOUT_MILLISEC = 10000; // = 10 seconds String postMessage="{}"; //HERE_YOUR_POST_STRING. HttpParams httpParams = new BasicHttpParams(); HttpConnectionParams.setConnectionTimeout(httpParams, TIMEOUT_MILLISEC); HttpConnectionParams.setSoTimeout(httpParams, TIMEOUT_MILLISEC); HttpClient client = new DefaultHttpClient(httpParams); HttpPost request = new HttpPost(serverUrl); request.setEntity(new ByteArrayEntity( postMessage.toString().getBytes("UTF8"))); HttpResponse response = client.execute(request);
如果使用Apache HTTP Client,从Android发送json对象很容易。 这里有一个关于如何做的代码示例。 您应该为networking活动创build一个新的线程,以免lockingUI线程。
protected void sendJson(final String email, final String pwd) { Thread t = new Thread() { public void run() { Looper.prepare(); //For Preparing Message Pool for the child Thread HttpClient client = new DefaultHttpClient(); HttpConnectionParams.setConnectionTimeout(client.getParams(), 10000); //Timeout Limit HttpResponse response; JSONObject json = new JSONObject(); try { HttpPost post = new HttpPost(URL); json.put("email", email); json.put("password", pwd); StringEntity se = new StringEntity( json.toString()); se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json")); post.setEntity(se); response = client.execute(post); /*Checking response */ if(response!=null){ InputStream in = response.getEntity().getContent(); //Get the data in the entity } } catch(Exception e) { e.printStackTrace(); createDialog("Error", "Cannot Estabilish Connection"); } Looper.loop(); //Loop in the message queue } }; t.start(); }
您也可以使用Google Gson发送和检索JSON。
public void postData(String url,JSONObject obj) { // Create a new HttpClient and Post Header HttpParams myParams = new BasicHttpParams(); HttpConnectionParams.setConnectionTimeout(myParams, 10000); HttpConnectionParams.setSoTimeout(myParams, 10000); HttpClient httpclient = new DefaultHttpClient(myParams ); String json=obj.toString(); try { HttpPost httppost = new HttpPost(url.toString()); httppost.setHeader("Content-type", "application/json"); StringEntity se = new StringEntity(obj.toString()); se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json")); httppost.setEntity(se); HttpResponse response = httpclient.execute(httppost); String temp = EntityUtils.toString(response.getEntity()); Log.i("tag", temp); } catch (ClientProtocolException e) { } catch (IOException e) { } }
HttpPost
被Android Api Level 22所弃用。所以,请进一步使用HttpUrlConnection
。
public static String makeRequest(String uri, String json) { HttpURLConnection urlConnection; String url; String data = json; String result = null; try { //Connect urlConnection = (HttpURLConnection) ((new URL(uri).openConnection())); urlConnection.setDoOutput(true); urlConnection.setRequestProperty("Content-Type", "application/json"); urlConnection.setRequestProperty("Accept", "application/json"); urlConnection.setRequestMethod("POST"); urlConnection.connect(); //Write OutputStream outputStream = urlConnection.getOutputStream(); BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8")); writer.write(data); writer.close(); outputStream.close(); //Read BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), "UTF-8")); String line = null; StringBuilder sb = new StringBuilder(); while ((line = bufferedReader.readLine()) != null) { sb.append(line); } bufferedReader.close(); result = sb.toString(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return result; }
在下面的链接中有一个出色的Android HTTP库:
http://loopj.com/android-async-http/
简单的要求非常简单:
AsyncHttpClient client = new AsyncHttpClient(); client.get("http://www.google.com", new AsyncHttpResponseHandler() { @Override public void onSuccess(String response) { System.out.println(response); } });
发送JSON(在https://github.com/loopj/android-async-http/issues/125发信给;`voidberg'):
// params is a JSONObject StringEntity se = null; try { se = new StringEntity(params.toString()); } catch (UnsupportedEncodingException e) { // handle exceptions properly! } se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json")); client.post(null, "www.example.com/objects", se, "application/json", responseHandler);
这些都是asynchronous的,适用于Android,安全地从UI线程调用。 responseHandler将在你创build的同一个线程(通常是你的UI线程)上运行。 它甚至有一个内置的JSON的resonseHandler,但我更喜欢使用谷歌GSON。
现在,由于HttpClient
被弃用,当前的工作代码是使用HttpUrlConnection
创build连接,并写入和读取连接。 但我更喜欢使用“ 排球” 。 这个库来自android的AOSP。 我发现很容易使用JsonObjectRequest
或JsonArrayRequest
没有比这更简单的了。 使用OkHttpLibrary
创build你的json
JSONObject requestObject = new JSONObject(); requestObject.put("Email", email); requestObject.put("Password", password);
并像这样发送。
OkHttpClient client = new OkHttpClient(); RequestBody body = RequestBody.create(JSON, json); Request request = new Request.Builder() .addHeader("Content-Type","application/json") .url(url) .post(requestObject.toString()) .build(); okhttp3.Response response = client.newCall(request).execute();
public class getUserProfile extends AsyncTask<Void, String, JSONArray> { JSONArray array; @Override protected JSONArray doInBackground(Void... params) { try { commonurl cu = new commonurl(); String u = cu.geturl("tempshowusermain.php"); URL url =new URL(u); // URL url = new URL("http://192.168.225.35/jabber/tempshowusermain.php"); HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); httpURLConnection.setRequestMethod("POST"); httpURLConnection.setRequestProperty("Content-Type", "application/json"); httpURLConnection.setRequestProperty("Accept", "application/json"); httpURLConnection.setDoOutput(true); httpURLConnection.setRequestProperty("Connection", "Keep-Alive"); httpURLConnection.setDoInput(true); httpURLConnection.connect(); JSONObject jsonObject=new JSONObject(); jsonObject.put("lid",lid); DataOutputStream outputStream = new DataOutputStream(httpURLConnection.getOutputStream()); outputStream.write(jsonObject.toString().getBytes("UTF-8")); int code = httpURLConnection.getResponseCode(); if (code == 200) { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream())); StringBuffer stringBuffer = new StringBuffer(); String line; while ((line = bufferedReader.readLine()) != null) { stringBuffer.append(line); } object = new JSONObject(stringBuffer.toString()); // array = new JSONArray(stringBuffer.toString()); array = object.getJSONArray("response"); } } catch (Exception e) { e.printStackTrace(); } return array; } @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected void onPostExecute(JSONArray array) { super.onPostExecute(array); try { for (int x = 0; x < array.length(); x++) { object = array.getJSONObject(x); ComonUserView commUserView=new ComonUserView();// commonclass.setId(Integer.parseInt(jsonObject2.getString("pid").toString())); //pidArray.add(jsonObject2.getString("pid").toString()); commUserView.setLid(object.get("lid").toString()); commUserView.setUname(object.get("uname").toString()); commUserView.setAboutme(object.get("aboutme").toString()); commUserView.setHeight(object.get("height").toString()); commUserView.setAge(object.get("age").toString()); commUserView.setWeight(object.get("weight").toString()); commUserView.setBodytype(object.get("bodytype").toString()); commUserView.setRelationshipstatus(object.get("relationshipstatus").toString()); commUserView.setImagepath(object.get("imagepath").toString()); commUserView.setDistance(object.get("distance").toString()); commUserView.setLookingfor(object.get("lookingfor").toString()); commUserView.setStatus(object.get("status").toString()); cm.add(commUserView); } custuserprof = new customadapterformainprofile(getActivity(),cm,Tab3.this); gridusername.setAdapter(custuserprof); // listusername.setAdapter(custuserprof); } catch (Exception e) { e.printStackTrace(); } }
- Google Playtesting版没有发布应用程序?
- MSBuild DeployOnBuild = true不发布
- 使用jQuery在AJAX请求中添加标题
- Web部署任务失败。 (“Microsoft.Web.Deployment.DeploymentManager”的types初始值设定项引发exception。)
- Apache HttpClient 4.0.3 – 如何为POST请求设置cookie和sessionID
- 找不到Visual Studio SignTool.exe
- 如何使用POST将参数添加到HttpURLConnection
- 从HttpServletRequest中检索JSON对象
- 为什么unaligned apk需要?