提问者:小点点

Android常量字符串作为捆绑键不工作


我已经接管了一个应用程序的源代码继续开发。在很多情况下,字符串资源被用作包中的键:bundle.putboolean(getString(r.string.bundle_extra_name_from_user),true);

在代码的其他部分,硬编码字符串被用作键(在包的putValue和getValue方法中都是如此)。所以我决定去掉硬编码的东西。此外,我认为,每次要向包添加信息/从包接收信息时,从r.string...中挖掘字符串资源是一个过于耗费资源的操作。而不仅仅是在一个专用类中拥有一堆string常量。访问这些应该快得多,因为它们在内存中(至少我是这么认为的)。

我重构了整个程序以使用string常量:

public class BundleConstants {

        public static final String VEHICLE_ID = "vehicleId";
        public static final String TRANSACTION_ID = "transactionId";
        public static final String PIN_CODE = "pinCode";
        public static final String DEVICE_ID = "deviceId";
        .
        .
        .
        etc

        private BundleConstants() {}
    }

完成后,我注意到在应用程序的某些地方,值没有到达包中。bundle.getBoolean(bundleConstants.boolean_key);每次都给我false,甚至当它被设置为true时(我对它进行了调试,true肯定已经放入了bundle中)。

从那时起,我重构了它,将字符串资源用作捆绑键。现在一切都很顺利。

有没有一种特殊的方法来使用字符串常量作为捆绑键?还是我忽略了什么?


共1个答案

匿名用户

在Java中使用static final常量有点棘手。直到您第一次创建包含类的实例或调用类本身内部的静态方法时,才会分配常量值(当然这是一个弱点!)

因此,要使常量正常工作,您可以在restore state方法调用之前加载的类中声明它们(如activity或片段),或者在访问键之前直接调用BundleConstants类中的方法来初始化它们。