Android 数组列表如何使用 [英] Android arraylist how to use

查看:26
本文介绍了Android 数组列表如何使用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我有一个标记列表,我需要弄清楚如何处理.我已经搜索了几个小时,但没有明确说明如何使用这些信息或如何从列表中获取信息.请解释或分解我的代码并告诉我它是如何工作的.所以我可以在我的地图上设置我的标记.

So I have a list of markers that I need to figure out what to do with. I have searched for a few hours now, but nothing clearly states how to use the information or how to get the information from the list. Please explain or break down my code and inform me on how it exactly works. So I can set my markers on my map.

这就是我将标记添加到列表中的方式.现在 onPostExecute 我需要在我的地图上显示它们.但我不确定如何获得它们.我从我的服务器向我的应用发送了大约 50 个标记.

This is how I add my markers to my list. Now on onPostExecute I need to display them on my map. But I am unsure how to get them. There is about 50 markers that I send to my app from my server.

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

推荐答案

此代码将遍历整个列表.

This code will iterate through the whole list.

for (int i = 0; i < markers.size(); i++) {
    Marker currentMarker = markers.get(i);
    // do what you want with the current marker
}

这是来自开发者网站的一些代码.这是如何向地图添加标记的示例.

This is some code from the developers website. It's an example of how to add a marker to a map.

Marker marker = map.addMarker(new MarkerOptions()
     .position(new LatLng(37.7750, 122.4183))
     .title("San Francisco")
     .snippet("Population: 776733"));

您已经在 doInBackground 方法中这样做了.那么问题究竟出在哪里?

You are already doing this in your doInBackground method. So what is the problem exactly?

编辑 2:尝试使用此代码代替您的代码,看看它是否有效.

EDIT 2: Try using this code in place of yours, and see if it works.

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 数组列表如何使用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆