私はid、lat、longの3 つの列を持つgeopointsという 1 つの一意のテーブルを持つ MySQL データベースを持っています。 .
私の目的は、json 配列を生成する php スクリプトと httpPost などを使用して、これら 4 つのジオポイントすべてを動的にマップビューにマークすることです...
これは私がこれまでに持っているコードです:
getjson = (Button) findViewById(R.id.button1);
getjson.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
JSONArray jArray;
String result = null;
InputStream is = null;
StringBuilder sb = null;
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();//Whats this for?
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(
"http://????????.com/????/getGeopoints.php");
HttpResponse response = httpclient.execute(httpPost);
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpEntity entity = response.getEntity();
is = entity.getContent();
} catch (Exception e) {
Log.e("log_tag", "Error connecting to http " + e.toString());
}
try {
BufferedReader reader = new BufferedReader(
new InputStreamReader(is, "iso-8859-1"), 8);
sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
result = sb.toString();
} catch (Exception e) {
Log.e("log_tag", "Error converting " + e.toString());
}
try {
jArray = new JSONArray(result);
for (int i = 0; i <= jArray.length(); i++) {
JSONObject json_data = jArray.getJSONObject(i);
Log.i("log_tag", "id: " + json_data.getInt("id")
+ ", latitude: " + json_data.getInt("lat")
+ ", longitude: " + json_data.getInt("long"));
}
} catch (JSONException e) {
Log.e("log_tag", "Error parsing data " + e.toString());
}
}
});
これはphpファイルです:
<?php
mysql_connect("?????.com", "username", "password");
mysql_select_db("database_name");
$q = mysql_query("SELECT * FROM geopoints");
while ($e = mysql_fetch_assoc($q))
$output[] = $e;
print(json_encode($output));
mysql_close();
?>
ブラウザーに URL を入力すると、必要な正確な情報を含む正確な json 配列が生成されるため、このファイルは正しく実行されています。私が理解していないと思うだけですが、HttpEntityは何のためですか? チュートリアルをフォローアップしたため、情報をフィルタリングしたくないので、情報を含む配列を使用してデータベースからフィルタリングしました(1つまたは2つだけでなく、すべてのデータベーステーブルエントリが必要です)。空白です。
コードの何が問題になっていますか? logcat で取得するエラーは、すべてのキャッチ メッセージ「11-29 12:47:29.662: E/log_tag(898): Error connections to http Http android.os.NetworkOnMainThreadException」です。