尝试在Android服务器上发布json时遇到问题。错误是:
加载JSON失败。特殊字符不得包含在内 请求。请检查所请求的JSON。
我已经关注了许多例子,但没有一个是有帮助的。请提供解决方案或帮助我在代码中找到问题。
以下是在服务器上发布JSON字符串的代码。
public class JSONParser {
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
// constructor
public JSONParser() {
}
public JSONObject getJSONFromUrl(String url) {
// Making HTTP request
try {
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
/* ====================================================================================================*/
JSONObject listobj = new JSONObject ();
JSONObject listInvoice = new JSONObject ();
listInvoice.put("client_id","");
listInvoice.put("date_from","");
listInvoice.put("date_to","");
listInvoice.put("invoice_number","");
listInvoice.put("invoice_record_status","");
listInvoice.put("invoice_status","");
listInvoice.put("page","1");
listInvoice.put("per_page_record","10");
listobj.put("listInvoice", listInvoice);
//--List nameValuePairs = new ArrayList(1);
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
nameValuePairs.add(new BasicNameValuePair("json_data", listobj.toString()));
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
Log.d("JSON",listobj.toString());
/*======================================================================================================*/
HttpResponse httpResponse = httpClient.execute(httpPost);
String is = EntityUtils.toString(httpResponse.getEntity());
Log.d("JSON","RESPONSE : " + is);
//--HttpEntity httpEntity = httpResponse.getEntity();
//--is = httpEntity.getContent();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
catch (JSONException e) {
Log.e("JSON",e.getMessage());
}
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 = sb.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;
}
}
}
答案 0 :(得分:6)
这是将json传递给您的URL
的功能public void getServerData() throws JSONException, ClientProtocolException, IOException {
String title = Title_edittext.getText().toString().trim();
String details = Details_edittext.getText().toString().trim();
HttpParams httpParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParams, TIMEOUT_MILLISEC);
HttpConnectionParams.setSoTimeout(httpParams, TIMEOUT_MILLISEC);
HttpClient client = new DefaultHttpClient(httpParams);
HttpPost request = new HttpPost(url); // add your url here...
request.setHeader( "Content-Type", "application/json" );
JSONObject json = new JSONObject();
json.put("client_id", channel_token);
json.put("date_from", data_src_id);
json.put("date_to", title);
Log.i("JSON Object", json.toString());
StringEntity se = new StringEntity(json.toString());
se.setContentEncoding("UTF-8");
se.setContentType("application/json");
request.setEntity(se);
HttpResponse response = client.execute(request);
HttpEntity entity = response.getEntity();
InputStream is = entity.getContent();
String _response = convertStreamToString(is);
System.out.println("res-- " + _response);
// Check if server response is valid code
int res_code = response.getStatusLine().getStatusCode();
System.out.println("code-- " +res_code);
}
private static String convertStreamToString(InputStream is) {
BufferedReader reader = new BufferedReader(new InputStreamReader(is), 8192);
StringBuilder sb = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null) {
sb.append((line + "\n"));
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}
答案 1 :(得分:0)
这是链接How to send a JSON object over Request with Android?
int TIMEOUT_MILLISEC = 10000; // = 10 seconds
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);
看一下这行:request.setEntity(new ByteArrayEntity( 。postMessage.toString()的getBytes( “UTF8”)));