所以我有一个标记列表,我需要弄清楚如何处理它们。我已经搜索了几个小时,但没有明确说明如何使用这些信息或如何从列表中获取信息。请解释或分解我的代码并告诉我它到底是如何工作的。这样我就可以在 map 上设置标记。
这就是我将标记添加到列表中的方法。现在,在 onPostExecute 上,我需要将它们显示在我的 map 上。但我不确定如何获得它们。我从服务器发送到我的应用程序的大约有 50 个标记。
List<Marker> markers = new ArrayList<Marker>();
Marker marker = map.addMarker(new MarkerOptions()
.position(location)
.title(getName)
.snippet(getDesc)
.icon(BitmapDescriptorFactory
.fromResource(R.drawable.icon)));
markers.add(marker);
编辑:源代码
private class PrefetchData extends AsyncTask<String, Void, String>
{
@Override
protected void onPreExecute()
{
super.onPreExecute();
}
protected void onPostExecute(Void result)
{
for (int i = 0; i < markers.size(); i++)
{
Marker currentMarker = markers.get(i);
// do what you want with the current marker
}
}
protected String doInBackground(String... params)
{
JsonParser jsonParser = new JsonParser();
String json = jsonParser.getJSONFromUrl("http://www.mywebsite.com/test.json");
if (json != null)
{
try
{
JSONObject parent = new JSONObject(json);
JSONArray eventDetails = parent.getJSONArray("maps");
for(int i=0; i < eventDetails.length(); i++)
{
object = eventDetails.getJSONObject(i);
String getName = object.getString("name");
String getAddy =object.getString("addy");
String getHours = object.getString("hours");
String getDesc = object.getString("desc");
String getLat = object.getString("lat");
String getLong = object.getString("long");
Log.e("JSON", "> " + getName + getAddy + getHours + getDesc + getLat + getLong );
double lat_ = Double.valueOf(getLat);
double lng_ = Double.valueOf(getLong);
LatLng location = new LatLng(lat_, lng_);
Marker marker = map.addMarker(new MarkerOptions()
.position(location)
.title(getName)
.snippet(getDesc)
.icon(BitmapDescriptorFactory
.fromResource(R.drawable.icon)));
markers.add(marker);
// creating connection detector class instance
cd = new Connection(getApplicationContext());
}
}
catch (JSONException e)
{
// TODO Auto-generated catch block
Log.e("Json Error", "Error: " + e.toString());
e.printStackTrace();
}
}
return null;
}
}
LOGCAT 错误:
01-26 01:27:43.082: E/AndroidRuntime(8209): FATAL EXCEPTION: main
01-26 01:27:43.082: E/AndroidRuntime(8209): Process: com.databasedemo, PID: 8209
01-26 01:27:43.082: E/AndroidRuntime(8209): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.databasedemo/com.databasedemo.Map}: java.lang.NullPointerException
01-26 01:27:43.082: E/AndroidRuntime(8209): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
01-26 01:27:43.082: E/AndroidRuntime(8209): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
01-26 01:27:43.082: E/AndroidRuntime(8209): at android.app.ActivityThread.access$800(ActivityThread.java:135)
01-26 01:27:43.082: E/AndroidRuntime(8209): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
01-26 01:27:43.082: E/AndroidRuntime(8209): at android.os.Handler.dispatchMessage(Handler.java:102)
01-26 01:27:43.082: E/AndroidRuntime(8209): at android.os.Looper.loop(Looper.java:136)
01-26 01:27:43.082: E/AndroidRuntime(8209): at android.app.ActivityThread.main(ActivityThread.java:5017)
01-26 01:27:43.082: E/AndroidRuntime(8209): at java.lang.reflect.Method.invokeNative(Native Method)
01-26 01:27:43.082: E/AndroidRuntime(8209): at java.lang.reflect.Method.invoke(Method.java:515)
01-26 01:27:43.082: E/AndroidRuntime(8209): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
01-26 01:27:43.082: E/AndroidRuntime(8209): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
01-26 01:27:43.082: E/AndroidRuntime(8209): at dalvik.system.NativeStart.main(Native Method)
01-26 01:27:43.082: E/AndroidRuntime(8209): Caused by: java.lang.NullPointerException
01-26 01:27:43.082: E/AndroidRuntime(8209): at com.databasedemo.Map.onCreate(Map.java:121)
01-26 01:27:43.082: E/AndroidRuntime(8209): at android.app.Activity.performCreate(Activity.java:5231)
01-26 01:27:43.082: E/AndroidRuntime(8209): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
01-26 01:27:43.082: E/AndroidRuntime(8209): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
01-26 01:27:43.082: E/AndroidRuntime(8209): ... 11 more
最佳答案
此代码将遍历整个列表。
for (int i = 0; i < markers.size(); i++) {
Marker currentMarker = markers.get(i);
// do what you want with the current marker
}
编辑:这是来自开发人员网站的一些代码。这是如何向 map 添加标记的示例。
Marker marker = map.addMarker(new MarkerOptions()
.position(new LatLng(37.7750, 122.4183))
.title("San Francisco")
.snippet("Population: 776733"));
您已经在 doInBackground 方法中执行此操作。那么到底是什么问题呢?
编辑 2:尝试使用此代码代替您的代码,看看它是否有效。
private class PrefetchData extends AsyncTask<String, Void, String> {
private LatLng location;
private String getName;
private String getDesc;
private List<Object[]> markerOptions;
@Override
protected void onPreExecute() {
super.onPreExecute();
}
protected void onPostExecute(Void result) {
for (int i = 0; i < markerOptions.size; i++) {
Marker marker = map.addMarker(new MarkerOptions()
.position(markerOptions.get(i)[0])
.title(markerOptions.get(i)[1])
.snippet(markerOptions.get(i)[2])
.icon(BitmapDescriptorFactory
.fromResource(R.drawable.icon)));
markers.add(marker);
}
}
protected String doInBackground(String... params) {
markerOptions = new ArrayList<Object[]>();
JsonParser jsonParser = new JsonParser();
String json = jsonParser.getJSONFromUrl("http://www.mywebsite.com/test.json");
if (json != null) {
try {
JSONObject parent = new JSONObject(json);
JSONArray eventDetails = parent.getJSONArray("maps");
for(int i=0; i < eventDetails.length(); i++) {
object = eventDetails.getJSONObject(i);
getName = object.getString("name");
String getAddy =object.getString("addy");
String getHours = object.getString("hours");
getDesc = object.getString("desc");
String getLat = object.getString("lat");
String getLong = object.getString("long");
Log.e("JSON", "> " + getName + getAddy + getHours + getDesc + getLat + getLong );
double lat_ = Double.valueOf(getLat);
double lng_ = Double.valueOf(getLong);
location = new LatLng(lat_, lng_);
markerOptions.add(new Object[]{location, getName, getDesc});
// creating connection detector class instance
cd = new Connection(getApplicationContext());
}
}
catch (JSONException e) {
// TODO Auto-generated catch block
Log.e("Json Error", "Error: " + e.toString());
e.printStackTrace();
}
}
return null;
}
}
关于Android 数组列表如何使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21360320/