您好我是Android的新手,我想知道如何从URL获取JSON数据,然后使用URL中的数据在android地图活动中设置标记。
感谢您的帮助
答案 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数据,您可以使用JSONObject
和JSONArray
类。您基本上必须使用JSON字符串作为构造函数的参数来实例化JSONObject
,然后使用其方法getJSONObject
和getJSONArray
使用您想要获取的数据成员的名称。以下是有关它们的文档和教程。 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
对象的类。