Java 安卓 | 将“POST”JSON 数据发送到服务器
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/34555260/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Android | Send “POST” JSON Data to Server
提问by
I used this code to send post data to server using android. Could anyone give me any idea or your sample how to send POST OR GET json data to server TOMCAT..! Steps tips :
我使用此代码使用 android 将发布数据发送到服务器。任何人都可以给我任何想法或您的示例如何将 POST 或 GET json 数据发送到服务器 TOMCAT ..!步骤提示:
- create HttpClient
- make POST request to the given URL
- build jsonObject
- convert JSONObject to JSON to String
- set json to StringEntity
- set httpPost Entity
- Set some headers to inform server about the type of the content
- Execute POST request to the given URL
- receive response as inputStream
- convert inputstream to string
return result
private class HttpAsyncTask extends AsyncTask<String, Void, String> { @Override protected String doInBackground(String... urls) { person = new Person(); person.setName(etName.getText().toString()); person.setCountry(etCountry.getText().toString()); person.setTwitter(etTwitter.getText().toString()); return POST(urls[0],person); } // onPostExecute displays the results of the AsyncTask. @Override protected void onPostExecute(String result) { Toast.makeText(getBaseContext(), "Data Sent!", Toast.LENGTH_LONG).show(); } }
- 创建 HttpClient
- 向给定的 URL 发出 POST 请求
- 构建 json 对象
- 将 JSONObject 转换为 JSON 到字符串
- 将 json 设置为 StringEntity
- 设置 httpPost 实体
- 设置一些标头以通知服务器内容的类型
- 对给定的 URL 执行 POST 请求
- 接收响应作为输入流
- 将输入流转换为字符串
返回结果
private class HttpAsyncTask extends AsyncTask<String, Void, String> { @Override protected String doInBackground(String... urls) { person = new Person(); person.setName(etName.getText().toString()); person.setCountry(etCountry.getText().toString()); person.setTwitter(etTwitter.getText().toString()); return POST(urls[0],person); } // onPostExecute displays the results of the AsyncTask. @Override protected void onPostExecute(String result) { Toast.makeText(getBaseContext(), "Data Sent!", Toast.LENGTH_LONG).show(); } }
回答by Ravi Jaggarapu
You are using HttpClient. Actually Android deprecates HttpClient insted of HttpClient you need to "HttpURLConnection" for POST Request check Here one of the sample : here
您正在使用 HttpClient。实际上 Android 弃用了 HttpClient 的 HttpClient 插入,您需要“HttpURLConnection”进行 POST 请求检查这里是示例之一:这里
Updated:
更新:
You need to add following two more line for the sample code for achieve your requirement.
您需要为示例代码添加以下两行以实现您的要求。
conn.addRequestProperty("Accept", "application/json");
conn.addRequestProperty("Content-Type", "application/json");
In given Sample Code:
在给定的示例代码中:
conn.setDoOutput(true);
//Add the following line to the given sample
===============> updated for JSON POST <=========================
conn.addRequestProperty("Accept", "application/json");
conn.addRequestProperty("Content-Type", "application/json");
===============> updated for JSON POST <=========================
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("firstParam", paramValue1));
params.add(new BasicNameValuePair("secondParam", paramValue2));
params.add(new BasicNameValuePair("thirdParam", paramValue3));
回答by Elennio
If you need to get data try this...
如果您需要获取数据,请尝试此...
try{
URL url = new URL("http://www.youraddresheredude.com/andthefile");
//Open the connection here, and remember to close it when job its done.
URLConnection conn = url.openConnection();
conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
//theJSONYouWantToSend should be the JSONObject as String
wr.write(convertStandardJSONString(theJSONYouWantToSend)); //<--- sending data.
wr.flush();
// Here you read any answer from server.
BufferedReader serverAnswer = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while ((line = serverAnswer.readLine()) != null) {
System.out.println("LINE: " + line); //<--If any response from server
//use it as you need, if server send something back you will get it here.
}
wr.close();
serverAnswer.close();
} catch (Exception e) {
Log.e("Cuack", "Something its wrong");
}
回答by thirua
public class JSONParser {
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
static String responseString;
// constructor
public JSONParser() {
}
// function get json from url
// by making HTTP POST or GET mehtod
public static JSONObject makeHttpRequest(String url, String method,
List<NameValuePair> params) {
// Making HTTP request
Log.d("json class", url + "," + method + "," + params.toString());
try {
// check for request method
if (method == "POST") {
// request method is POST
// defaultHttpClient
Log.d("json class", "post method");
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
Log.d("json class", "HttpPost" + httpPost);
httpPost.setEntity(new UrlEncodedFormEntity(params));
Log.d("json class", "setentity");
HttpResponse httpResponse = httpClient.execute(httpPost);
ByteArrayOutputStream out = new ByteArrayOutputStream();
int responce_code = httpResponse.getStatusLine()
.getStatusCode();
Log.d("responce code", "response method");
Log.d("responce code", "" + responce_code);
StatusLine statusLine = httpResponse.getStatusLine();
if (statusLine.getStatusCode() == HttpStatus.SC_OK) {
Log.i("RESPONSE", "6");
/*
* httpResponse.getEntity().writeTo(out); out.close();
* String responseString = out.toString(); Log.i("RESPONSE",
* ""+responseString);
*/
// ..more logic
} else {
Log.d("RESPONSE", "null pointer exception");
// Closes the connection.
httpResponse.getEntity().getContent().close();
throw new IOException(statusLine.getReasonPhrase());
}
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
} else if (method == "GET") {
// request method is GET
DefaultHttpClient httpClient = new DefaultHttpClient();
String paramString = URLEncodedUtils.format(params, "utf-8");
url += "?" + paramString;
Log.i("url", url);
HttpGet httpGet = new HttpGet(url);
ByteArrayOutputStream out = new ByteArrayOutputStream();
HttpResponse httpResponse = httpClient.execute(httpGet);
int responce_code = httpResponse.getStatusLine()
.getStatusCode();
Log.d("responce code", "response method");
Log.d("responce code", "" + responce_code);
StatusLine statusLine = httpResponse.getStatusLine();
if (statusLine.getStatusCode() == HttpStatus.SC_OK) {
Log.d("RESPONSE", "6");
httpResponse.getEntity().writeTo(out);
Log.d("RESPONSE", "7");
out.close();
Log.d("RESPONSE", "8");
responseString = out.toString();
Log.d("RESPONSE", "9");
Log.i("RESPONSE", "" + responseString);
// ..more logic
} else {
Log.d("RESPONSE", "null pointer exception");
// Closes the connection.
httpResponse.getEntity().getContent().close();
throw new IOException(statusLine.getReasonPhrase());
}
/*
* HttpEntity httpEntity = httpResponse.getEntity(); is =
* httpEntity.getContent();
*/
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
/*
* BufferedReader reader = new BufferedReader(new InputStreamReader(
* is, "iso-8859-1"), 8); StringBuilder sb = new StringBuilder();
* String line = null; while ((line = reader.readLine()) != null) {
* sb.append(line + "\n"); } is.close();
*/
json = responseString.toString();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// try parse the string to a JSON object
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// return JSON String
return jObj;
}
}