2011-09-09 19 views
0

私は、開発とプロダクションの値を利用できるようにするために、いくつかの異なるAndroidアプリケーション間で共通のライブラリプロジェクトを共有しています。 Antを使う私は、dev.propertiesファイルまたはprod.propertiesファイルのenvironment.propertiesファイルを入れ替えることを望んでいました。.propertiesファイルの読み込みに問題がある

"/ com/iis/..."プロパティファイルをロードしようとすると、NullPointer例外が発生します。

何が間違っているのですか?共通**

はない、私は私が使用して考えることができるすべての可能な名前のコンボを試してみました

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 

*スタックトレースで見ることがあまりに**プロジェクト

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)); 
} 

です名前空間、フォルダ、クラス名

// 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

Areあなたのリソースはdexファイルにパッケージされていますか? http://code.google.com/p/android/issues/detail?id=10076を参照してください。

+0

ああ、そうではありませんでした。解明のため 'jar tvf your_project_name.apk | grep .properties'を実行すると、含めるべきプロパティファイルが実際に存在するかどうかを判断できます。プロパティファイルをassetsフォルダに移動した後、それらは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 

この問題を抱えている他の人にとっては、もう少し詳しく説明します。

関連する問題