【发布时间】:2012-08-15 13:18:11
【问题描述】:
我在从 Android 发送 JSON Array 到 Servlet 时遇到问题。但我可以通过浏览器发送相同的JSON Array。我花了很多时间试图解决这个问题,但找不到解决方案。
URL = "http://192.168.*.*:8080/Test/TestServlet?q=add&array="
我在末尾添加了 JSON 数组:
[{"amount":"3","test":"test",...}]
GlassFish 服务器错误:
org.json.JSONException: A JSONArray text must start with '[' at character 0 of
等待回复,谢谢。
Servlet:
protected void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("application/json");
PrintWriter out = response.getWriter();
String req = request.getParameter("q");
try
{
Class.forName("com.mysql.jdbc.Driver");
System.out.println("Driver found");
dbConnect = DriverManager.getConnection("jdbc:mysql://localhost/***",
"root", "***");
dbStatement = dbConnect.createStatement();
if (req.equals("add")) {
String json_array = request.getParameter("array");
String query = null;
org.json.JSONArray jArray = new org.json.JSONArray(json_array);
for (int i = 0; i < jArray.length(); i++)
{
org.json.JSONObject obj = jArray.getJSONObject(i);
query =
"INSERT INTO *** (...) VALUES(" + obj.getInt("***") + ",'" +
obj.getString("***") + "','" + obj.getString("***") + "','" +
obj.getString("***") + "'," + obj.getDouble("***") + "," +
obj.getDouble("***") + "," + obj.getDouble("***") + ",'" +
obj.getString("***") + "','"+obj.getString("***")+"','','"+
obj.getString("***") + "')";
}
dbStatement.executeUpdate(query);
...
安卓
protected void sendJson(JSONArray json)
{
HttpClient client = new DefaultHttpClient();
HttpConnectionParams.setConnectionTimeout(client.getParams(), 10000);
HttpResponse response;
try
{
HttpPost post = new HttpPost(URL);
StringEntity se = new StringEntity(json.toString());
Log.i("JSON before sending", 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();
}
}
【问题讨论】:
-
当您在从 Android 发送的 servlet 中调试/pring
json_array时会看到什么? -
在 org.json.JSONArray 的 org.json.JSONTokener.syntaxError(JSONTokener.java:450)。
(JSONArray.java:108) 在 org.json.JSONArray. (JSONArray.java:147) 在 TestServlet.doPost(TestServlet.java:114) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:688) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:第770章) -
不是这个。在 servlet 中有这一行
String json_array = request.getParameter(..。就在这之后,输入System.out.println(json_array),看看它会打印什么。 -
我之前试过,它在那条线上崩溃了,所以没有要打印的消息。我猜是HTTP参数的问题。我可能应该在 Android 部分用这个“q=add&array=”做点什么,但我不确定具体如何。有什么建议吗?
-
您正在使用代码中的 POST。尝试使用 GET。请参阅我的答案中的示例代码。