Android - 不使用上下文读取属性文件

时间:2015-02-20 21:39:38

标签: java android eclipse

我有一个不是活动的简单类,所以我无法访问上下文,但我想在我的项目中读取属性文件(而不是sd卡)。

MyClass {

    public static void readProperties(){
        Properties props=new Properties();
        InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("/mine.properties");
        try {
            props.load(inputStream); 
        } catch(Exception e){ 
            e.printStackTrace();
        }
    }
}

当我运行代码时,我得到一个空指针异常:

  

02-20 15:32:38.396:E / AndroidRuntime(27473):java.lang.NullPointerException:in == null
  02-20 15:32:38.396:E / AndroidRuntime(27473):at java.util.Properties.load(Properties.java:246)

我应该在哪里放置我的属性文件以便能够阅读它?我尝试src,项目根,资产,以及MyClass.java旁边,每次都获得空指针。我做错了什么?

我正在将Eclipse与ADT结合使用(尚未在Android Studio上使用) 我的结构是这样的:

  

-src
      - 主/ SomeActivity.java
      - 主/ MyClass.java
      - 主/ mine.properties
  -assets
  -gen
  -res

1 个答案:

答案 0 :(得分:2)

我使用gradle.properties来存储API密钥等内容。 Gradle属性是简单的键值对:

tmdbApiKey=1a2b3c4d5e6f7g8h9i0j6f7g8h9i0j

属性文件位于我的Android项目的根目录中:

/Wutson
  gradle.properties
  ... other files/directories
  mobile/
    build.gradle

/Wutson/mobile/build.gradle这是我的Android模块的构建文件中,我从我的属性文件中读取,并使用buildConfigField方法在我的BuildConfig类中生成静态最终字段可以在运行时从我的Android模块中的类访问。

apply plugin: 'com.android.application'

...

def tmdbApiKey = hasProperty('tmdbApiKey') ? tmdbApiKey : 'provide this in gradle.properties'

android {
    ...

    defaultConfig {
        ...

        buildConfigField "String", "TMDB_API_KEY", "\"$tmdbApiKey\""
    }

    ...
}

我的Android模块中的某个类,例如MainActivity,我可以访问此值:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.d("TEST", "my api key: " + BuildConfig.TMDB_API_KEY);
}

将打印:

TEST | my api key: 1a2b3c4d5e6f7g8h9i0j6f7g8h9i0j

除非您忘记将该属性放在文件中,否则您将获得:

TEST | my api key: provide this in gradle.properties

我可以在project repo on GitHub找到完整的示例(其中gradle.properties.examplegradle.properties的示例)。