私の PHP は、SQL テーブルから JSON を正常に返します。しかし、私の Android コードでは、すべてを 1 つの文字列に格納しています。実際に 1 つの文字列に格納してから、複数のオブジェクトに解析する必要がありますか? 関連するコードは次のとおりです。
まず、現在保存されている結果は次のようになります。
04-04 21:26:00.542: V/line(1230): [{"category":"elections","id":"0","title":"Who will you vote for in November's Presidential election?","published":"2012-04-02","enddate":"2012-04-30","responsetype":"0"},{"category":"elections","id":"2","title":"Question title, ladies and gents","published":"2012-04-02","enddate":"2012-04-30","responsetype":"1"}]
したがって、2 つのテーブル行であっても、明らかにすべてが 1 つの巨大な文字列として格納されます。私のためにその行を生成するコードは次のとおりです。
public JSONObject getQuestionJSONFromUrl(String url, List<NameValuePair> params) {
// Making HTTP request
try {
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(params));
HttpResponse httpResponse = httpClient.execute(httpPost);
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) {
Log.v("while", line);
sb.append(line + "\n");
//Log.v("err", line);
}
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;
}
明らかに、現在 WHILE ループの後にあらゆる種類のエラーが発生しています。私はそれを整理しようと数日を費やしましたが、PHPが適切なJSONを返すようになっただけです(以前はそうではありませんでした)。JSONArray が必要で、各 JSON 結果が Array の 1 つのインデックス内に格納されていると思います。したがって、このメソッドの戻り値を JSONArray に変更する必要があると思いますが、それは正しいですか? PHPスクリプトから受け取ったJSONを解析するための正しい道を教えてくれる人はいますか?