我在一些不同的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
答案 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
希望这对于有这个问题的其他人来说会更清楚一点。