Java/Android 从 xml 获取数组

2023-12-30

我在整个应用程序中使用的 xml 文件中有一个经度和经度点的列表。我发现自己经常重复这段代码来获得积分,并认为一定有更好的方法吗?

    String[] mTempArray = getResources().getStringArray(R.array.stations);
    int len = mTempArray.length;
    mStationArray = new ArrayList<Station>();
    for(int i = 0; i < len; i++){
        Station s = new Station();
        String[] fields = mTempArray[i].split("[\t ]");
        s.setValuesFromArray(fields);
        Log.i("ADD STATION", ""+s);
        mStationArray.add(s);
    }

XML 的格式为:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <array name="stations">
        <item>
            <name>Station name</name>
            <longitude>1111111</longitude>
            <latitude>11111</latitude>
            <code>1</code>
        </item>

另一个(可能的)问题是,为了只获取一个电台,我必须获取所有电台并从数组中取出我想要的电台。这会慢很多吗?我可以使这个数组在整个应用程序中保持一致吗? (但保留单独的意图方法)


我有同样的想法MilkJug https://stackoverflow.com/questions/4691706/java-android-get-array-from-xml/4691823#4691823,使用实用程序方法来创建站点,但我想提供一种稍微不同的方法:将尽可能多的构建逻辑移至Station类构造函数。为了使示例简单,我将实用程序方法移至Station类也是如此。

这提供了一个整体更清晰的设计,因为在 Station 类本身之外,您的代码永远不必处理其构造/初始化步骤尚未完全完成的 Station 对象。

(吉安纳卡基斯的 https://stackoverflow.com/questions/4691706/java-android-get-array-from-xml/4691852#4691852如果您有很多 Station 对象,建议使用数据库可能是更好的方法。)

public class Station {
    private static List<Station> sStationArray = null;

    /**
     * Construct a Station from a specially-encoded String. The String
     * must have all the necessary values for the Station, separated by tabs.
     */ 
    public Station(String fieldString) {
        String[] fields = fieldString.split("[\t ]");

        // For safety, setValuesFromArray() should be declared 'final'.
        // Better yet, you could just move its body into this constructor.
        setValuesFromArray(fields);

        // I'm assuming 'mName' is the name field for the Station
        Log.i("Station", this.mName);
    }

    public static Station getStationArray(Context ctx) {
        if (sStationArray == null) {

            // (Please don't use the prefix 'm' for non-member variables!)
            final String[] tempArray = 
                ctx.getResources().getStringArray(R.array.stations);
            final int len = tempArray.length;

            // Passing the length into the ArrayList constructor (if it's
            // known, or can be guessed at) can be a very simple yet
            // effective optimization. In this case the performance boost
            // will almost certainly **not** be meaningful, but it's
            // helpful to be aware of it.
            sStationArray = new ArrayList<Station>(len);    

            for (int i = 0; i < len; i++) {
                Station s = new Station(tempArray[i]);
                sStationArray.add(s);
            }
        }
        return sStationArray;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java/Android 从 xml 获取数组 的相关文章

  • Spring Boot Data JPA 从存储过程接收多个输出参数

    我尝试通过 Spring Boot Data JPA v2 2 6 调用具有多个输出参数的存储过程 但收到错误 DEBUG http nio 8080 exec 1 org hibernate engine jdbc spi SqlStat
  • 图像作为电子邮件附件

    我想构建一个应用程序 我可以在电子邮件中附加图像 打开图像并将其设置为我的壁纸 我想让它跨平台 所以你能告诉我是否可以使用phonegap 或者我是否必须为iphone和android构建一个本机应用程序 您好 如果您只想通过电子邮件附加图
  • 从 BroadcastReceiver 类调用活动方法

    我知道我可以做一个内部接收器类来调用接收器中的任何方法 但我的主要活动太大了 要做的事情也很多 因此 我需要一个扩展广播接收器的类 但它不是内部类 并且可以从我的主要活动中调用一种方法 我不知道是否可能 但我的活动是家庭活动和 single
  • 如何访问JAR文件中的Maven资源? [复制]

    这个问题在这里已经有答案了 我有一个使用 Maven 构建的 Java 应用程序 我有一个资源文件夹com pkg resources 我需要从中访问文件 例如directory txt 我一直在查看各种教程和其他答案 但似乎没有一个对我有
  • 使用片段时应用程序崩溃

    我正在处理碎片和 我的代码中有一个我找不到的问题 logcat 指向我的一个片段中的这段代码 Override public View onCreateView LayoutInflater inflater ViewGroup conta
  • 在我的 Spring Boot 示例中无法打开版本 3 中的 Swagger UI

    我在 Spring Boot 示例中打开 swagger ui 时遇到问题 当我访问 localhost 8080 swagger ui 或 localhost 8080 root api name swagger ui 时出现这种错误 S
  • Mipmap 与可绘制文件夹[重复]

    这个问题在这里已经有答案了 我正在使用 Android Studio 1 1 Preview 1 我注意到 当我创建一个新项目时 我得到以下层次结构 不同 DPI 的 Mipmap 文件夹 不再有不同 DPI 的可绘制文件夹 我应该将所有资
  • 使用 AsyncTask 传递值

    我一直在努力解决这个问题 但我已经到了不知道该怎么办的地步 我想做的是使用一个类下载文件并将其解析为字符串 然后将该字符串发送到另一个类来解析 JSON 内容 所有部件都可以单独工作 并且我已经单独测试了所有部件 我只是不知道如何将值发送到
  • WorkManager 或 AlarmManager 用于日常请求然后通知工作?

    这是用例 用户设置具有特定时间的每日通知 在指定时间 发出网络请求以获取一些数据 然后使用检索到的数据显示通知 我不确定是否应该使用 AlarmManager 还是 WorkManager 来实现这个用例 据我了解 AlarmManager
  • 专门针对 JSP 的测试驱动开发

    在理解 TDD 到底是什么之前 我就已经开始编写测试驱动的代码了 在没有实现的情况下调用函数和类可以帮助我以更快 更有效的方式理解和构建我的应用程序 所以我非常习惯编写代码 gt 编译它 gt 看到它失败 gt 通过构建其实现来修复它的过程
  • 如何在 Android 中从 WorkManager 取消工作?

    我已经保存了 WorkManagerUUID转换成String在领域数据库中 这是代码 Constraints constraints new Constraints Builder setRequiredNetworkType Netwo
  • Android 如何将总天数准确更改为年、月、日?

    我正在做一个应用程序 该应用程序与根据给定的生日日期输入获取一个人的年龄有关 为此 我从下面的代码中获取从该日期到当前日期的总天数 String strThatDay 1991 05 10 SimpleDateFormat formatte
  • 在 Samsung Galaxy S5 Android 5.0 上使用 MediaPlayer 加载音频流需要超过 10 秒

    由于更新至 Android 5 0 MediaPlayer 在 Samsung Galaxy S5 上无法正常工作 启动音频流后加载时间超过 10 秒 示例代码 MediaPlayer mPlayer new MediaPlayer Str
  • 在命令行上卸载 Android SDK 的选定部分

    这与 卸载旧的 Android SDK 版本 https stackoverflow com questions 15182377 uninstall old android sdk versions 除非我想在无头 Linux CI 服务
  • 插件“Android Bundle Support”不兼容

    大家好 自从上次更新以来 当我启动 android studio 时 我遇到了一个非常奇怪的错误 我有这个错误 插件错误 插件 Android Bundle Support 不兼容 直到构建 AI 195 SNAPSHOT 我在网上找不到任
  • 在java中为组合框分配键

    我想添加一个JComboBox在 Swing 中这很简单 但我想为组合中的每个项目分配值 我有以下代码 JComboBox jc1 new JComboBox jc1 addItem a jc1 addItem b jc1 addItem
  • 我的应用程序中的后退按钮出现问题[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想在手机关闭时清除共享首选项值 你
  • Spring Rest 和 Jsonp

    我正在尝试让我的 Spring Rest 控制器返回jsonp但我没有快乐 如果我想返回 json 但我有返回的要求 完全相同的代码可以正常工作jsonp我添加了一个转换器 我在网上找到了用于执行 jsonp 转换的源代码 我正在使用 Sp
  • 使用 powershell 将 XML 转换为特定的 JSON 结构

    需要有关将 xml 转换为特定 json 结构的帮助 XML 看起来像这样
  • Java中super关键字的范围和使用

    为什么无法使用 super 关键字访问父类变量 使用以下代码 输出为 feline cougar c c class Feline public String type f public Feline System out print fe

随机推荐

  • 通过 FTP 将文件上传到 Sharepoint 文档库

    我想知道是否有人知道如何或是否可以通过 FTP 将文件上传到共享点 v3 MOSS 文档库 我知道 webdav 是可以的 如果可能的话 微软也支持吗 我不这么认为 我认为你的选择是 HTTP 通过上传页面 WebDAV 网页服务 对象模型
  • vb.net 中的 StackOverFlow 异常是什么?

    我什至不知道是什么导致了我的应用程序 它是什么 我创建了一个类的新实例 该类位于另一个文件中 但在我第一次调用方法时 它抛出了 StackOverFlow 异常 我认为从逻辑上讲 唯一会引发 stackoverflow 异常的情况是 如果有
  • 使用 $ 符号访问 svelte 存储会导致引用错误

    我有一个store js文件内容为 import writable from svelte store export const generateds writable 0 console log generateds generateds
  • 接口实例如何访问Object类的方法?

    interface Intf class A implements Intf class Test public static void main String args Intf obj new A obj toString 一个朋友给我
  • Protobuf-net:如何序列化复杂的集合?

    我正在尝试使用 protobuf net 序列化此类对象 ProtoContract public class RedisDataObject ProtoMember 1 public string DataHash ProtoMember
  • 如何让 Heroku 识别子目录(非根目录)中的yarn.lock 或 package.json

    我有一个 Rails 应用程序 在客户端使用 React Webpack 和 Yarn 我在 client 目录中拥有与客户端相关的所有内容 这包括我的yarn lock 和package json 文件 我有一个 Procfile 可以
  • 如何将 nginx 配置为 jetty 的代理?

    我一直在尝试将 nginx 设置为 jetty 的代理 我想做一些事情 如中所解释的这个答案 https stackoverflow com questions 20632987 how to serve clojure pages wit
  • Spark 1.0.2(以及 1.1.0)挂在分区上

    我在 apache Spark 中遇到了一个奇怪的问题 希望得到一些帮助 从 hdfs 读取数据 并进行一些从 json 到对象的转换 后 下一阶段 处理所述对象 在处理 2 个分区 总共 512 个分区 后失败 这种情况发生在大型数据集上
  • 为什么在 Android 5 (Lollipop) 上可以直接从其他线程更改 UI 视图?

    考虑以下代码 new Thread Override public void run myTextView setText Some text start 在棒棒糖之前的机器人上 该代码会导致CalledFromWrongThreadExc
  • GATT 以外的蓝牙低功耗 (BLE) 协议 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 除了 GATT 之外 还有其他方法或协议可以在 BLE 单模芯片 下使用 更适合更高吞吐量的任务吗 据我了解 我的问题的答案是否定的
  • 当操作数之一为零时,按位或返回布尔值

    为什么这里按位或返回布尔值 在所有运算符中 我最不希望使用按位运算符 nil 5 gt true nil 0 gt true nil true gt true nil false gt false nil nil gt false Foun
  • 异步回调? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 如何编写自己的异步回调 Like in var a function str callback setTimeout function co
  • Google 电子表格脚本 getValues - 强制使用 int 而不是 string

    有没有办法强制 getRange getValues 返回 int 虽然我的范围内只存在数字 但它会将它们作为字符串返回 我想避免在每一个语句中使用 parseInt 或使用转换后的值创建一个单独的数组 或者这是唯一的解决方案 获取数组然后
  • 在 Mercurial 中撤销多个变更集的最佳方法是什么?

    是最可靠的逐一进行的方法 对每个变更集使用 backout 命令 或者有没有办法创建一个大的反转变更集来覆盖一大堆 编辑 不连续 变更集 如果一对一的话 顺序重要吗 应该从最后到第一个吗 如果不同子项目之间存在合并 最佳方法是否会有所不同
  • manifest.json, content_scripts 限制与带端口号的 url 的匹配

    我正在编写一个 Google Chrome 扩展程序 该扩展程序仅在 URL 匹配时运行http 8000 我的 manifest json 文件的一部分 content scripts matches http 8000 js clien
  • [NSURLConnection sendAsynchronousRequest: ...] 总是发送完成块吗?

    很可能是一个相当微不足道的问题 但是完成块是否总是被调用 NSURLConnection sendAsynchronousRequest 或者我必须实施超时计时器吗 考虑以下我添加的地方MBProgressView在调用之前并仅在完成块中将
  • 从多个线程异步写入文件#

    这是我的情况 我希望在我的应用程序中尽可能高效地写入文件系统 该应用程序是多线程的 每个线程都可能写入同一个文件 有没有一种方法可以让我从每个线程异步写入文件 而不会让不同线程中的写入碰撞在一起 我正在使用 C 和 NET 3 5 并且我也
  • 如何为Python新的NamedTuple类型定义构造函数?

    您可能知道 这是在 python 中定义命名元组的最新类型 from typing import NamedTuple class MyType NamedTuple id int 0 name str 0 定义类型后 Python 解释器
  • UInt8 和 uint8_t 有什么区别

    有什么区别UInt8 and uint8 t or UInt16 and unit16 t 什么是 t imply 在 C99 中 可用的基本整数类型 没有 t 的类型 被认为是不够的 因为它们的实际大小可能在不同的系统中有所不同 因此 C
  • Java/Android 从 xml 获取数组

    我在整个应用程序中使用的 xml 文件中有一个经度和经度点的列表 我发现自己经常重复这段代码来获得积分 并认为一定有更好的方法吗 String mTempArray getResources getStringArray R array s