2011-09-09 132 views
0

我有一个共同的库项目在几个不同的Android应用程序之间共享,我需要允许开发和生产值可用。使用Ant我希望能够交换一个dev.properties或prod.properties文件的environment.properties文件。加载.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)); 
} 

**没有太多的堆栈跟踪

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

你可以发布堆栈跟踪吗? – beny23

+0

也许尝试删除第一个/在文件路径“com/iis/common/environment.properties” – othman

回答

0

是你确定你的资源被打包在dex文件中?见http://code.google.com/p/android/issues/detail?id=10076

+0

啊,他们不是。为了澄清如果你运行'jar tvf your_project_name.apk | grep .properties'你可以确定你试图包含的属性文件是否确实存在。将属性文件移动到资产文件夹后,它们将被包含在apk中。 – chris

0

关于访问文件和其他问题修复程序所需的路径,只是附加说明。

下面的代码在访问“your_project_path /资产/ 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 

希望这会为其他任何有这个问题的人清理一些东西。

相关问题