21

我会知道存储全局常量的最佳实践是什么,这些常量在编译时会随着环境(调试、预生产、生产、发布等)而改变。

在 iOS 中,我曾经将所有全局常量保存在头文件中,并使用预处理器宏对其进行更改,请参阅此答案:

Where to store global constants in an iOS application?

我应该为 Android 使用什么解决方案?

4

6 回答 6

26

在基本包文件夹中创建一个类常量。

(或者创建一个接口而不是一个类,这样就不需要每次都引用该类,但是由于代码可读性,这是不好的做法 ,但它会起作用)用值

填充它。 此外, the和 the也可以声明为。public static final

classinterfaceabstract

于 2013-02-25T12:42:37.013 回答
2

如果常量的值取决于环境(密度、语言环境等),那么您应该使用资源来存储它们(整数、字符串、维度等)。

在另一种情况下,您可以将全局常量放在一个文件中(最佳实践 - 为每组常量使用前缀)或将局部常量放在相关类中(例如,Intent 包含标志、附加组件、类别等)。

于 2013-02-25T13:05:58.737 回答
2

使用public static final values.它们并将它们保存在单独的 java 文件中,如下所示:

    static String QC    = "http:/************";
    static String DEV   = "http:/************";
    static String CLOUD = "http:/************";


    static String SERVICEURL = CLOUD ; //Use this SERVICEURL in your code at run time
于 2013-02-25T17:06:22.603 回答
2

另一种解决方案可能是使用资源文件(如果您满足于仅存储字符串值)。

这可用于存储常量,例如此应用程序管理的帐户:

前任。WelcomeActivity.java

AccountManager am = AccountManager.get(WelcomeActivity.this);
Account account = am.getAccountsByType(getResources().getString(R.string.ACCOUNT_TYPE))[0];

前任。res/values/strings.xml

<resources>
    <string name="ACCOUNT_NAME">com.acme.MyAccountSignature</string>
</resources>

这也将允许您在无需重新编译的情况下对其进行修改(类似于您通常解耦翻译的方式,strings.xml 文件最适合使用)。

于 2016-11-12T17:29:33.640 回答
2

非常简单的解决方案在这里

public class Constants {
    /**
     * Object key prams when pass the json object from server.
     */
    public static final String KEY_EMAIL = "email";
    public static final String KEY_PASSWORD = "password";
    public static final String KEY_DEVICE_TOKEN = "device_token";
    public static final String KEY_DEVICE_TYPE = "device_type";
    public static final String KEY_NAME = "name";
    public static final String KEY_COUNTRY_CODE = "country_code";
    public static final String KEY_PHONE_CODE = "phone-code";
    public static final String KEY_GENDER = "gender";
    public static final String KEY_DATE_OF_BIRTH = "date_of_birth";
    public static final String KEY_USER_ID = "user_id";
    public static final String KEY_LIMIT = "limit";
    public static final String KEY_DRIVER_ID = "driver_id";
    public static final String KEY_LONGTITUDE = "logitude";
    public static final String KEY_LATTITUDE = "lattitude";
    public static final String KEY_RATING = "rating";
    public static final String KEY_DETAILS = "details";
    public static final String KEY_ACCESS_TOKEN= "access_token";
    /**
     * Fragments name
     */
    public static final String FRAG_ETA = "ETA";
    public static final String FRAG_ACCOUNT_FRAGMENT = "ACCOUNT_FRAGMENT";
    public static final String FRAG_SETTING_FRAGMENT = "SETTING_FRAGMENT";
    public static final String FRAG_MAP_FRAGMENT = "MAP_FRAGMENT";
    public static final String FRAG_FEEDBACK = "FEEDBACK";
    public static final String FRAG_RATE_FRAGMENT = "RATE_FRAGMENT";

    public static final String USA_CODE = "+1";

    public static final String DISTANCE_SEARCH = "DISTANCE_SEARCH";


}

快乐编码

于 2019-03-02T11:02:34.163 回答
0

属性文件

我们在下面存储一个属性文件<project>/<package>/src/main/assets/config.properties

加载属性

   private static final String PROPS_NAME = "config.properties";
   private static Properties configuration;

   ...
   public static void init(Context ctx) {

        configuration = new Properties();
        InputStream rawResource = resources.getAssets().open(PROPS_NAME);
        configuration.load(rawResource);
于 2018-11-10T18:23:11.367 回答