关于java:在Android应用程序中存储全局常量的位置?

Where to store global constants in an Android application?

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

在iOS中,我将所有全局常量保存在头文件中,并使用预处理器宏更改它。请参阅以下答案:

在iOS应用程序中存储全局常量的位置?

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


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

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

public static final值填充。

此外,classinterface都可以声明为abstract


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

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

例如welcomeactivity.java

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

例如res/values/strings.xml

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

这还允许您在不需要重新编译的情况下修改它(类似于您通常如何分离翻译,strings.xml文件最适合用于此转换)。


使用EDCOX1×4,并将它们保持在单独的Java文件中:

1
2
3
4
5
6
    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


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

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


**这里有非常简单的解决方案**

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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";


}

快乐编码


文件属性

我们在//src/main/assets/config.properties下保存了一份财产档案。

正在加载属性

1
2
3
4
5
6
7
8
9
   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);