2016-07-03 4 views
2

私のプロジェクトでは、文字列からパッケージ名を読み込みたいが、エラーが発生する。 私はそれがそのようにされたコードも変更前:文字列から読み取るときにjava.lang.IllegalArgumentExceptionが発生する

public static String context; 
@Override 
public void onCreate() { 
    context = getApplicationContext().getResources().getString(R.string.package_app); 
} 

とするとき、私はこのようにそれを変更します:

static { 
    sURLMatcher.addURI(AlarmApplication.context+".model", "alarm", ALARMS); 
    sURLMatcher.addURI(AlarmApplication.context+".model", "alarm/#", ALARMS_ID); 
} 

私はこのように取得私のアプリケーションクラスで

static { 
    sURLMatcher.addURI("com.nooshindroid.yastashir2.model", "alarm", ALARMS); 
    sURLMatcher.addURI("com.nooshindroid.yastashir2.model", "alarm/#", ALARMS_ID); 
} 

ここに私のエラーがあります:

Unable to create application com.nooshindroid.yastashir2.AlarmApplication: java.lang.IllegalArgumentException: Unknown URL content://com.nooshindroid.yastashir2.model/alarm 
               at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4809) 
               at android.app.ActivityThread.access$1600(ActivityThread.java:154) 

答えて

0

static初期化ブロック内のコードは、ApplicationonCreateの前に実行されます。だからcontextフィールドはnullのままです。URIをマッチャーに追加すると

静的初期設定でBuildConfig.APPLICATION_ID + ".model"を代わりに使用できますか? BuildConfigフィールドはビルド時に書き込まれるため、静的初期化ブロックで使用できます。 APPLICATION_IDがニーズに合わない場合は、build.gradleファイルにカスタムビルド設定フィールドを追加することができます。

+0

そうです。私はBuildConfig.APPLICATION_IDを使用し、うまく動作します。おかげで多くの... – bmm

+0

あなたがそれをアップヴォートする必要があります有用な答えを見つけるとき。あなたが尋ねた質問に対する答えであり、それがあなたの問題を解決するなら、あなたはそれを受け入れるべきです。このようにして、誰かが同じ問題を抱えてこのページを見つけたら、この答えが働くことがわかります。 –

関連する問題