Android的ArrayList中如何使用 [英] Android arraylist how to use

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

问题描述

所以,我有我需要弄清楚怎么做标记列表。我已经寻找了几个小时了,但没有明确规定如何使用该信息,或者如何从列表中的信息。请解释或者打破我的code和告诉我它是如何工作的准确。因此,我可以设置在我的地图我的标记。

这是我怎么加我的标记到我的清单。现在onPostExecute我需要在我的地图上显示出来。但我不确定如何得到它们。有大约50标志我发送给我的应用程序从我的服务器。

 列表与LT标志物GT;标记=新的ArrayList<标志物GT;();
标记标记= map.addMarker(新的MarkerOptions()
            .POSITION(位置)
            .title伪(的getName)
            是.snippet(getDesc)
            .icon(BitmapDesc​​riptorFactory
                      .fromResource(R.drawable.icon)));            markers.add(标记);

编辑:SOURCE code

 私有类prefetchData延伸的AsyncTask<弦乐,太虚,字符串>
   {        @覆盖
        在preExecute保护无效()
        {
            super.on preExecute();
        }        保护无效onPostExecute(虚空结果)
        {
            的for(int i = 0; I< markers.size();我++)
            {
                标记currentMarker = markers.get(ⅰ);
                //做你想做的与当前标记
            }
        }        保护字符串doInBackground(字符串... PARAMS)
        {
            JsonParser jsonParser =新JsonParser();
            串JSON = jsonParser.getJSONFromUrl(http://www.mywebsite.com/test.json);            如果(JSON!= NULL)
            {
                尝试
                {
                    JSONObject的父=新的JSONObject(JSON);
                    JSONArray eventDetails = parent.getJSONArray(地图);                    的for(int i = 0; I< eventDetails.length();我++)
                    {
                        对象= eventDetails.getJSONObject(ⅰ);                        字符串的getName = object.getString(名称);
                        字符串getAddy = object.getString(阿迪);
                        字符串调用getHours = object.getString(小时);
                        字符串getDesc = object.getString(DESC);
                        串getLat = object.getString(纬度);
                        字符串getLong之= object.getString(长);                        Log.e(JSON,>中+的getName + getAddy +调用getHours + getDesc + getLat + getLong之);                        双lat_ = Double.valueOf(getLat);
                        双lng_ = Double.valueOf(getLong之);                        位置的LatLng =新经纬度(lat_,lng_);                        标记标记= map.addMarker(新的MarkerOptions()
                                .POSITION(位置)
                                .title伪(的getName)
                                是.snippet(getDesc)
                                .icon(BitmapDesc​​riptorFactory
                                       .fromResource(R.drawable.icon)));                        markers.add(标记);                        //创建连接器类实例
                        CD =新连接(getApplicationContext());
                    }
                }
                赶上(JSONException E)
                {
                    // TODO自动生成catch块
                    Log.e(Json的错误,错误:+ e.toString());
                        e.printStackTrace();
                }
             }            返回null;
         }
      }

logcat的错误:

 一月一日至26日:27:43.082:E / AndroidRuntime(8209):致命异常:主要
1月1日至26日:27:43.082:E / AndroidRuntime(8209):工艺:com.databasedemo,PID:8209
1月1日至26日:27:43.082:E / AndroidRuntime(8209):了java.lang.RuntimeException:无法启动活动ComponentInfo {com.databasedemo / com.databasedemo.Map}:显示java.lang.NullPointerException
1月1日至26日:27:43.082:E / AndroidRuntime(8209):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
1月1日至26日:27:43.082:E / AndroidRuntime(8209):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
1月1日至26日:27:43.082:E / AndroidRuntime(8209):在android.app.ActivityThread.access $ 800(ActivityThread.java:135)
1月1日至26日:27:43.082:E / AndroidRuntime(8209):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1196)
1月1日至26日:27:43.082:E / AndroidRuntime(8209):在android.os.Handler.dispatchMessage(Handler.java:102)
1月1日至26日:27:43.082:E / AndroidRuntime(8209):在android.os.Looper.loop(Looper.java:136)
1月1日至26日:27:43.082:E / AndroidRuntime(8209):在android.app.ActivityThread.main(ActivityThread.java:5017)
1月1日至26日:27:43.082:E / AndroidRuntime(8209):在java.lang.reflect.Method.invokeNative(本机方法)
1月1日至26日:27:43.082:E / AndroidRuntime(8209):在java.lang.reflect.Method.invoke(Method.java:515)
1月1日至26日:27:43.082:E / AndroidRuntime(8209):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:779)
1月1日至26日:27:43.082:E / AndroidRuntime(8209):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
1月1日至26日:27:43.082:E / AndroidRuntime(8209):在dalvik.system.NativeStart.main(本机方法)
1月1日至26日:27:43.082:E / AndroidRuntime(8209):因:显示java.lang.NullPointerException
1月1日至26日:27:43.082:E / AndroidRuntime(8209):在com.databasedemo.Map.onCreate(Map.java:121)
1月1日至26日:27:43.082:E / AndroidRuntime(8209):在android.app.Activity.performCreate(Activity.java:5231)
1月1日至26日:27:43.082:E / AndroidRuntime(8209):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
1月1日至26日:27:43.082:E / AndroidRuntime(8209):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
1月1日至26日:27:43.082:E / AndroidRuntime(8209):11 ...更多


解决方案

这code将整个列表进行迭代。

 的for(int i = 0; I< markers.size();我++){
    标记currentMarker = markers.get(ⅰ);
    //做你想做的与当前标记
}

编辑:这是从开发人员网站上的某些code。这是怎样一个标记添加到地图的例子。

 标记标记= map.addMarker(新的MarkerOptions()
     .POSITION(新经纬度(37.7750,122.4183))
     .title伪(旧金山)
     是.snippet(人口:776733));

您已经在您的doInBackground方法做这个。那么究竟是什么问题呢?

编辑2:试着在你的地方使用这种code,并看看它是否工作

 私有类prefetchData延伸的AsyncTask<弦乐,太虚,字符串> {        私人经纬度位置;
        私人字符串的getName;
        私人字符串getDesc;
        私人列表<对象[]>的MarkerOptions;        @覆盖
        在preExecute保护无效(){
            super.on preExecute();
        }        保护无效onPostExecute(虚空结果){
            的for(int i = 0; I< markerOptions.size;我++){
                标记标记= map.addMarker(新的MarkerOptions()
                                .POSITION(markerOptions.get(ⅰ)[0])
                                .title伪(markerOptions.get(ⅰ)[1])
                                是.snippet(markerOptions.get(ⅰ)[2])
                                .icon(BitmapDesc​​riptorFactory
                                       .fromResource(R.drawable.icon)));                        markers.add(标记);
            }
        }        保护字符串doInBackground(字符串... PARAMS){
        的MarkerOptions =新的ArrayList<对象[]>();
            JsonParser jsonParser =新JsonParser();
            串JSON = jsonParser.getJSONFromUrl(http://www.mywebsite.com/test.json);            如果(JSON!= NULL){
                尝试{
                    JSONObject的父=新的JSONObject(JSON);
                    JSONArray eventDetails = parent.getJSONArray(地图);                    的for(int i = 0; I< eventDetails.length();我++){
                        对象= eventDetails.getJSONObject(ⅰ);                        的getName = object.getString(名称);
                        字符串getAddy = object.getString(阿迪);
                        字符串调用getHours = object.getString(小时);
                        getDesc = object.getString(DESC);
                        串getLat = object.getString(纬度);
                        字符串getLong之= object.getString(长);                        Log.e(JSON,>中+的getName + getAddy +调用getHours + getDesc + getLat + getLong之);                        双lat_ = Double.valueOf(getLat);
                        双lng_ = Double.valueOf(getLong之);                        位置=新的经纬度(lat_,lng_);                        markerOptions.add(新的对象[] {位置的getName,getDesc});                        //创建连接器类实例
                        CD =新连接(getApplicationContext());
                    }
                }
                赶上(JSONException E){
                    // TODO自动生成catch块
                    Log.e(Json的错误,错误:+ e.toString());
                        e.printStackTrace();
                }
             }            返回null;
         }
      }

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.

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);

EDIT: SOURCE CODE

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 ERRORS:

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
}

EDIT: 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"));

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

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

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