Android 数组列表如何使用

2024-05-03

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

这就是我将标记添加到列表中的方法。现在,在 onPostExecute 上,我需要将它们显示在我的地图上。但我不确定如何获得它们。我从我的服务器发送到我的应用程序的大约 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;
         }
      }  

日志错误:

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
}

编辑:这是来自开发人员网站的一些代码。这是如何向地图添加标记的示例。

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;
         }
      }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 数组列表如何使用 的相关文章

随机推荐

  • Google Universal Analytics - 命令被忽略

    我正在使用 Google Universal Analytics 来跟踪页面浏览量 当我导航到具有 Google Analytics 网站实时功能的页面时 我可以看到 因此我的代码一定可以正常工作 然而 Chrome 一直在控制台中显示 I
  • 带有 Angular2 和 Typescript 的 Visual Studio 2013

    我在用着angular2 快速入门 https angular io docs ts latest quickstart html我遇到了 Visual Studio 无法识别的问题Angular2 with 打字稿导入模块 其余一切都很好
  • Razor 模板中的特殊字符未正确编码

    我用 ASP NET Core MVC 做了一些测试 我试图表现出像 这样的特殊字符 但显示为 示例 创建新视图并放置 div div 默认情况下 cshtml文件以 UTF 16 编码 HTTP 响应标头中的字符集是 UTF 8 在 la
  • 使用 Java Swing 平均成绩 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我有一个家庭作业 我一直在编码 我以
  • Nginx 背后的多个 Meteor 站点

    这个问题与this https stackoverflow com questions 10936242 how can i correct the meteor base url in a nginx reverse proxy conf
  • 现实世界抽象类使用简单示例

    有没有使用抽象类的现实世界简单示例 我试图进入 PHP 的 OOP 但我仍然无法理解 为什么应该使用抽象类以及何时使用 是的 我知道不可能创建抽象类实例 只能创建继承它的类的实例 也许您有一个图像类 并且有 2 个驱动程序 GD 和 Ima
  • 为什么我能够使用无效的类指针进行函数调用

    在下面的代码片段中 虽然指针未初始化 但调用仍然成功 temp ptr ptr gt func2 是C 语言特性的问题 还是VC 6编译器的作弊 class temp public temp a 9 int func1 return a b
  • Spring Boot如何读取jar外部的属性文件

    在我的目标文件夹中 有 2 个文件夹 lib 和 conf 所有的属性文件都放在conf文件夹中 jar放在lib Folder中 在 Spring Boot 之前 我们在 spring xml 中使用以下配置来使用 value
  • 应用程序的外观 - Py2exe / wxPython

    所以我的问题是我的应用程序的外观和感觉 因为它看起来像一个旧的外观应用程序 它是一个 wxPython 应用程序 在 python 上它运行良好并且看起来不错 但是当我使用 py2exe 将其转换为 exe 时 外观很糟糕 现在我知道如果你
  • 如何在我的 Android 库 (AAR) 中包含 proguard 配置

    Android 库 根据AAR 文件规范 http tools android com tech docs new build system aar format 包含一个 proguard txt 文件 我的理解是 该文件声明了如何正确地
  • 在 Visual Studio 2010 中自动放置右花括号

    有没有一种方法可以在我在 Visual Studio 2010 中键入左大括号时自动放置右大括号 Netbeans 提供了类似的功能并且非常方便 The 生产力电动工具 http visualstudiogallery msdn micro
  • 如何在JdbcTemplate中执行多批量删除?

    我想一次删除多个数据库条目 仅当 3 个字段匹配 此处 姓名 电子邮件 年龄 时 才应删除每个条目 如果我只想删除单个属性 我会选择 String sql DELETE FROM persons WHERE email IN JdbcTem
  • 如何在经典 ASP 中将 Windows-1255 转换为 UTF-8?

    如何将 windows 1255 字符串转换为 utf 8classic应用服务提供商 我的数据库是 windows 1255 我想将我的网站转移到 utf 8 代码是否在这个答案 https stackoverflow com quest
  • css Flex div 随着子文本区域的增长而增长(无jquery)[重复]

    这个问题在这里已经有答案了 想象一下我有以下内容 div padding 20px div style display flex background gold div
  • Postgresql JDBC 驱动程序中的批量更新在自动提交中回滚

    我正在使用 postgres 9 3 1100 jdbc41 JDBC4 驱动程序进行批量插入 根据 JDBC 规范 其可达 到应用程序以禁用自动提交并提交或 回滚事务 就我而言 我没有使用任何事务 即自动提交为真 但如果批次中的其中一个插
  • Eclipse 中的 Android 框架源码级调试

    Android 框架的 Java 源代码可从 source android com 获取 我可以下载它们并将其提供给 Eclipse 以便在调试时进入框架方法吗 更好的是 有人知道 Eclipse 插件可以根据需要自动从 Android G
  • 测试计划/文档/管理工具

    我正在寻找一个好的 最好是免费的测试计划和文档工具 理想情况下 能够跟踪针对哪个软件版本运行了哪些测试 并具有报告能力 列出了一大堆工具here http www opensourcetesting org testmgt php但还有其他
  • 向数据集中选定的一组列名称添加后缀

    我想向数据集 CTDB 中的一组列添加后缀 例如 我有以下列 我想在末尾添加 Child 该子集是包含 100 多列的较大数据集的一部分 我不想重写每个列名称 9 SCARED BREATHE 10 SCARED HEADACHE SCHO
  • PHP 中使用 MVC 的 Post-Redirect-Get (PRG) 最佳实践

    PRG 模式与 MVC 是否有最佳实践 在本教程中 http www theserverside com news 1365146 Redirect After Post http www theserverside com news 13
  • Android 数组列表如何使用

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