Android 发送JSON数据问题 androidjsonwebserver 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1.可以考虑使用fastjson.jar ,直接将json序列化一下就行了!我觉得应该是序列化后访问服务器的时候格式存在问题2.400错误,由于语法格式有误,服务器无法理解此请求,也就是客户端请求有问题 当然格式错误了,既然是post请求你就应该使用post的方式提交,要加上&格式,使用下面的代码,我已经注释的很清楚另外:/** * 发送Post请求到服务器 ,並返回請求結果 * * @param params * 請求參數 * @param encode * 請求的編碼格式 * @param urlString * 請求的URL地址 * @return 返回讀取到的字符串 */ public static String submitPostData(Map<String, String> params, String encode, String urlString) { URL url = null; try { url = new URL(urlString); } catch (MalformedURLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } byte[] data = getRequestData(params, encode).toString().getBytes();// 获得请求体 try { HttpURLConnection httpURLConnection = (HttpURLConnection) (url) .openConnection(); httpURLConnection.setConnectTimeout(5000);// 设置连接超时时间 httpURLConnection.setDoInput(true);// 打开输入流,以便从服务器获取数据 httpURLConnection.setDoOutput(true);// 打开输出流,以便向服务器提交数据 httpURLConnection.setRequestMethod("POST");// 设置以Post方式提交数据 httpURLConnection.setUseCaches(false); // 使用Post方式不能使用缓存 // 设置请求体的类型是文本类型 httpURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); // 设置请求体的长度 httpURLConnection.setRequestProperty("Content-Length", String.valueOf(data.length)); // 获得输出流,向服务器写入数据 OutputStream outputStream = httpURLConnection.getOutputStream(); outputStream.write(data); int response = httpURLConnection.getResponseCode(); // 获得服务器的响应码 if (response == HttpURLConnection.HTTP_OK) { InputStream inptStream = httpURLConnection.getInputStream(); return getResponseResult(inptStream); } } catch (IOException e) { Log.d(TAG, "网络请求连接超时!"); return null; } return null; }/** * 封裝請求,請求的參數使用&進行隔開,服務端通過截取&進行解析 例如:請求參數 ("userid",1) * ("username","admin")-->轉換後的格式爲:userid=1&username=admin * 如果是其他非英文字符則會自動轉換成UTF-8的格式編碼 * * @param params * 請求的參數,鍵/值對應 * @param encode * 請求編碼 * @return */ private static StringBuffer getRequestData(Map<String, String> params, String encode) { StringBuffer stringBuffer = new StringBuffer(); // 存储封装好的请求体信息 try { for (Map.Entry<String, String> entry : params.entrySet()) { stringBuffer.append(entry.getKey()).append("=") .append(URLEncoder.encode(entry.getValue(), encode)) .append("&"); } stringBuffer.deleteCharAt(stringBuffer.length() - 1); // 删除最后的一个"&" } catch (Exception e) { e.printStackTrace(); } return stringBuffer; }里面请求的参数自键-值对应的,是用map或者其它 估计是没加请求头,你用了StringEntity还得告诉服务器这是JSON格式而不是普通StringhttpPost.setHeader("Content-Type", "application/json"); 不是,服务器我测试了没有问题,用客户端输出的JSON去测试服务器无法理解导致的错误 cubicTo()画出的bezier曲线,如何确定已知点到曲线的距离? Android webView 加载网页时,使用本地图片替换网页内的图片 请教 Android 录音的问题 android开发进阶问题 android异常 android webview 调用 goBack() 返回上一页 页面有时候自动刷新 点击返回键后webview无效了。 android jni调用setlocale失败,如何实现wstring到string的互转,要支持中文 关于环信的REST API 求问安卓toast android UI布局,请打神帮忙! 如何实现仿系统自带 相机功能?
* 发送Post请求到服务器 ,並返回請求結果
*
* @param params
* 請求參數
* @param encode
* 請求的編碼格式
* @param urlString
* 請求的URL地址
* @return 返回讀取到的字符串
*/
public static String submitPostData(Map<String, String> params,
String encode, String urlString) {
URL url = null;
try {
url = new URL(urlString);
} catch (MalformedURLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
byte[] data = getRequestData(params, encode).toString().getBytes();// 获得请求体
try {
HttpURLConnection httpURLConnection = (HttpURLConnection) (url)
.openConnection();
httpURLConnection.setConnectTimeout(5000);// 设置连接超时时间
httpURLConnection.setDoInput(true);// 打开输入流,以便从服务器获取数据
httpURLConnection.setDoOutput(true);// 打开输出流,以便向服务器提交数据
httpURLConnection.setRequestMethod("POST");// 设置以Post方式提交数据
httpURLConnection.setUseCaches(false); // 使用Post方式不能使用缓存
// 设置请求体的类型是文本类型
httpURLConnection.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");
// 设置请求体的长度
httpURLConnection.setRequestProperty("Content-Length",
String.valueOf(data.length));
// 获得输出流,向服务器写入数据
OutputStream outputStream = httpURLConnection.getOutputStream();
outputStream.write(data); int response = httpURLConnection.getResponseCode(); // 获得服务器的响应码
if (response == HttpURLConnection.HTTP_OK) {
InputStream inptStream = httpURLConnection.getInputStream();
return getResponseResult(inptStream);
}
} catch (IOException e) {
Log.d(TAG, "网络请求连接超时!");
return null;
}
return null;
}
/**
* 封裝請求,請求的參數使用&進行隔開,服務端通過截取&進行解析 例如:請求參數 ("userid",1)
* ("username","admin")-->轉換後的格式爲:userid=1&username=admin
* 如果是其他非英文字符則會自動轉換成UTF-8的格式編碼
*
* @param params
* 請求的參數,鍵/值對應
* @param encode
* 請求編碼
* @return
*/
private static StringBuffer getRequestData(Map<String, String> params,
String encode) {
StringBuffer stringBuffer = new StringBuffer(); // 存储封装好的请求体信息
try {
for (Map.Entry<String, String> entry : params.entrySet()) {
stringBuffer.append(entry.getKey()).append("=")
.append(URLEncoder.encode(entry.getValue(), encode))
.append("&");
}
stringBuffer.deleteCharAt(stringBuffer.length() - 1); // 删除最后的一个"&"
} catch (Exception e) {
e.printStackTrace();
}
return stringBuffer;
}
里面请求的参数自键-值对应的,是用map或者其它
httpPost.setHeader("Content-Type", "application/json");