我正在做类似于你自己的事情,但我正在使用服务器。我这样做的原因是出于计算原因。当应用程序首先启动一个HTTP请求被发送到一个包含MySQL查询的php脚本。 php脚本接收用户当前的经纬度,并以JSON形式返回当前位置1KM内的所有点。然后,该应用程序将该JSON解析为本地MySQL数据库并进行处理。
发送HTTP请求,并解析JSON到数据库中我做了以下..
//http post
try{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://URL");
httppost.setEntity(new UrlEncodedFormEntity(parameters));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
InputStream is = entity.getContent();
//convert response to string
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();
result=sb.toString();
}catch(Exception e){
new AlertDialog.Builder(this)
.setTitle("Woops!")
.setMessage("Getlocations:It appears the server is not reachable. Check your connectivity and try again.")
.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int which) {
//User wants to start activity..
}
})
.show();
Log.e("log_tag", "Error in connection or convert "+e.toString());
}
//parse json data
try{
System.out.println("parsing data");
JSONArray jArray = new JSONArray(result);
if(icount != 0){
try{
SQLiteDatabase db = tweets.getWritableDatabase();
db.delete(TABLE_NAME,null,null);
}finally {
tweets.close();
}
}
//TODO: Change this to num
for(int i=0;i<jArray.length() && q < 1;i++){
System.out.println("ARRAY LENGTH " + jArray.length());
q++;
JSONObject json_data = jArray.getJSONObject(i);
System.out.println("Getting Info");
Double lat = json_data.getDouble("lat");
Double lng = json_data.getDouble("lng");
String link = json_data.getString("link");
String message = json_data.getString("message");
String sname = json_data.getString("sname");
String name = json_data.getString("name");
//Add each entry to SQL database...
System.out.println("Adding table row!");
try{
addloc(name,sname,message,link,lat,lng);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
tweets.close();
}
count();
}
}catch(JSONException e){
new AlertDialog.Builder(this)
.setTitle("Woops!")
.setMessage("Getlocations: It appears something went wrong processing the information.")
.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int which) {
//User wants to start activity..
}
})
.show();
Log.e("log_tag", "Error parsing data "+e.toString());
}
对于这个工作你需要的是一个短的PHP文件这需要纬度/经度东西像...
<?php
mysql_connect("host","user","pass");
mysql_select_db("database");
$lat = $_REQUEST['currlat'];
$lng = $_REQUEST['currlng'];
$q=mysql_query("QUERY") or die(mysql_error());
if (mysql_num_rows($q) == 0) {
echo "No rows found, nothing to print so am exiting";
exit;
}
if(!q){
echo "NO RESULT";
exit;
}
while($e=mysql_fetch_assoc($q))
$output[]=$e;
print(json_encode($output));
mysql_close();
?>
这将采取JSON值和打印结果。
//编辑:为了获得纬度/经度,我使用GPS。
希望这会有所帮助。
谢谢你的提示Twaroog - 它工作得很好。感谢你,我能够进一步推进我的项目。 – Pavel 2010-08-05 09:38:15
没问题,我在项目中也是这样做的。 – LordTwaroog 2010-08-05 10:18:32