如何使用来自url的JSON数据,以便在地图活动android中设置标记

时间:2016-03-23 16:51:57

标签: java android json google-maps

您好我是Android的新手,我想知道如何从URL获取JSON数据,然后使用URL中的数据在android地图活动中设置标记。

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

要从URL获取数据,您应该在后台执行此操作。有多种方法可以做到这一点,最简单的方法可能是创建一个扩展AsyncTask并使用其doInBackground方法的类。这是一些关于它的文档。

https://developer.android.com/reference/android/os/AsyncTask.html

您可以在此解释如何使用AsyncTask获取数据。

http://developer.android.com/training/basics/network-ops/connecting.html

要解析JSON数据,您可以使用JSONObjectJSONArray类。您基本上必须使用JSON字符串作为构造函数的参数来实例化JSONObject,然后使用其方法getJSONObjectgetJSONArray使用您想要获取的数据成员的名称。以下是有关它们的文档和教程。 http://developer.android.com/reference/org/json/JSONObject.html http://developer.android.com/reference/org/json/JSONArray.html http://www.tutorialspoint.com/android/android_json_parser.htm

在压缩JSON字符串的情况下,要正确显示JSON字符串,我建议您将其键入https://jsonformatter.curiousconcept.com,然后您可以看到它的格式很好,以查看JSON的组成方式。

要调用谷歌地图,您使用隐式意图,这是一个Android教程,介绍如何使用它们来使用主要应用程序,包括谷歌地图。

http://developer.android.com/guide/components/intents-common.html

答案 1 :(得分:0)

使用HttpUrlConnection获取JSON数据,然后使用从服务器(url)获得的JSON JSONObject创建一个新的data对象,现在您只需要获取来自JSONObject的信息,尊重网址提供的密钥。此时,您只需将值传递给GoogleMap Object。例如:

让我们假设网址响应此JSON数据:

{ 
   "long" : 25,
   "lat" : 6
}

使用HttpURLConnection

恢复代码
URL url = new URL("http://localhost_or_any_url/mypage.php");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
String buff = "", data= "";
InputStream is = urlConnection.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
while ((buff = br.readLine()) != null) data+= buff;
JSONObject json= new JSONObject(data);
int long= json.getInt("long");
int lat= json.getInt("lat");

现在你有两个变量(long,lat)的位置(x,y)(经度,纬度),你只需要将它们传递给GoogleMap对象来创建这样的标记:< / p>

LatLng myPosition= new LatLng(-34, 151);
googleMap.addMarker(new MarkerOptions().position(myPosition).title("My position"));
googleMap.moveCamera(CameraUpdateFactory.newLatLng(myPosition));
//the last line (the call to moveCamera method) is optional, it helps to move the camera to the marker in case the current map position is far from the marked position

这是一个简单的示例,您需要知道从url获取数据的位置(网络操作无法在主线程内执行,您必须创建AsyncTask或{{1} })以及如何将数据传递给包含Thread对象的类。

祝你好运。