加载.properties文件时遇到问题

时间:2011-09-09 18:32:35

标签: java android

我在一些不同的Android应用程序之间共享了一个公共库项目,我需要这些项目才能使开发和生产值可用。使用Ant我希望能够将environment.properties文件交换为dev.properties或prod.properties文件。

尝试加载“/ com / iis / ...”属性文件时,我收到NullPointer异常。

对于做错了什么的任何想法?

**常见的是项目

static {
    Properties p = new Properties();
    InputStream input = BaseWebApi.class.getClass().getResourceAsStream("/com/iis/common/environment.properties");
    try {
        p.load(input);
        input.close();
    } catch (IOException e) {
        Log.d(TAG, "Unable to load environment.properties file");
        e.printStackTrace();
    }

    sApiUserName = p.getProperty(KEY_API_USER_NAME);
    sApiPassword = p.getProperty(KEY_API_PASSWORD);
    sServerAddress = p.getProperty(KEY_SERVER_ADDRESS);
    sServerProtocol = p.getProperty(KEY_SERVER_PROTOCOL);
    sServerRootPath = p.getProperty(KEY_SERVER_ROOT_PATH);
    sServerPort = Integer.parseInt(p.getProperty(KEY_SERVER_PORT));
}

**在stacktrace

中看不多
09-09 12:35:43.935: ERROR/AndroidRuntime(853): Caused by: java.lang.NullPointerException
09-09 12:35:43.935: ERROR/AndroidRuntime(853):     at java.util.Properties.load(Properties.java:290)
09-09 12:35:43.935: ERROR/AndroidRuntime(853):     at com.iis.common.webapis.BaseWebApi.<clinit>(BaseWebApi.java:60)
09-09 12:35:43.935: ERROR/AndroidRuntime(853):     ... 8 more

* 我尝试了所有可能的名称组合,我可以想到使用名称空间,文件夹和类名

// namespaces, folder
"/com/iis/android_common/environment.properties"
"com/iis/android_common/environment.properties"

// namespaces, project name
"/com/iis/common/environment.properties"
"com/iis/common/environment.properties"

// folder
"/android_common/environment.properties"

// project name
"/common/environment.properties"

// direct path
/environment.properties
environment.properties

2 个答案:

答案 0 :(得分:0)

您确定您的资源正在打包在dex文件中吗?请参阅http://code.google.com/p/android/issues/detail?id=10076

答案 1 :(得分:0)

关于访问该文件所需的路径和其他问题修复,只需另外注意。

以下代码可用于访问'your_project_path / assets / api.properties`

public class WebApi {
    private static final String TAG = "WebApi";

    // configuration keys
    private static final String API_URL = "api_url";
    private static final String API_PROTOCOL = "api_protocol";
    private static final String API_PORT = "api_port";

    // server settings
    protected static String URL;
    protected static String PROTOCOL;
    protected static int PORT;

    // load server dev/prod settings via api.properties file
    static {
        InputStream input = WebApi.class.getResourceAsStream("/assets/api.properties");
        Properties p = new Properties();
        try {
            Log.d(TAG, "Setting api properties");
            p.load(input);

            URL = p.getProperty(API_URL);
            PROTOCOL = p.getProperty(API_PROTOCOL);
            PORT = Integer.parseInt(p.getProperty(API_PORT));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    #...
}

另外需要注意的是,之前使用的密钥访问属性必须是小写的(虽然我没有发布属性文件内容,但它们不在初始发布中。)

// api.properties (don't use upper case)
api_url=10.0.1.7
api_protocol=http
api_port=3000

希望这对于有这个问题的其他人来说会更清楚一点。