JSON形式で応答するサーバーから場所の座標を要求するAndroidアプリケーションを開発しました(現時点では2つの場所を送信するだけです):
これは、サーバーからの php コードです。
$place = $db->getCoordinates($name);
if ($place != false) {
$response[1]["success"] = 1;
$response[1]["place"]["H"] = $place[1]["H"];
$response[1]["place"]["V"] = $place[1]["V"];
$response[1]["place"]["placeid"] = $place[1]["placeid"];
$response[1]["place"]["name"] = $place[1]["name"];
$response[1]["place"]["type"] = $place[1]["type"];
$response[1]["place"]["note"] = $place[1]["note"];
// place found
// echo json with success = 1
$response[2]["success"] = 1;
$response[2]["place"]["H"] = $place[2]["H"];
$response[2]["place"]["V"] = $place[2]["V"];
$response[2]["place"]["placeid"] = $place[2]["placeid"];
$response[2]["place"]["name"] = $place[2]["name"];
$response[2]["place"]["type"] = $place[2]["type"];
$response[2]["place"]["note"] = $place[2]["note"];
echo json_encode($response);
}
アプリが座標を取得すると、次の方法で解析を試みます。
JSONObject json_places = userFunction.getPlaces();
JSONObject places = json_places.getJSONObject("1");
JSONObject coord = places.getJSONObject("place");
getplaces():
public JSONObject getPlaces(){
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("tag", allcoordinates_tag));
JSONObject json = jsonParser.getJSONFromUrl("http://"+ip+placesURL, params);
// return json
Log.i("JSON", json.toString());
return json;
}
JSONパーサー:
public class JSONParser {
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
// constructor
public JSONParser() {
}
public JSONObject getJSONFromUrl(String url, List<NameValuePair> params) {
// Making HTTP request
try {
// defaultHttpClient
HttpPost httpPost = new HttpPost(url);
HttpParams httpParameters = new BasicHttpParams();
int timeoutConnection = 9000;
HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
int timeoutSocket = 9000;
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);
httpPost.setEntity(new UrlEncodedFormEntity(params));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
catch (ConnectTimeoutException e) {
e.printStackTrace();
}
catch (ClientProtocolException e) {
e.printStackTrace();
} catch (Exception 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 = sb.toString();
Log.e("JSON", json);
} 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;
}
}
エラーのあるJSONは次のとおりです。
アプリが JSON 応答を解析しようとすると、クラッシュして JSONException を送信します: java.lang.String 型の値を JSONObject に変換できません。これを解決するにはどうすればよいですか? ありがとう