2012-02-09 7 views
6

なぜこのようなことが起こっているのかわかりません。私がDDMSをチェックすると、ファイルもありません。アプリケーションサブクラスでこのフォルダにアクセスしようとしています。なぜこれが起こっているのか? アクティビティを拡張しないクラスで使用できるように、アプリケーションコンテキストをグローバルにする必要があります。getFilesDir()を使用するとアプリケーションコンテキストがnullを返す

package mci.multipratic; 

import java.io.File; 
import java.io.FileInputStream; 
import java.util.Properties; 
import android.app.Application; 
import android.content.Context; 

public class MultiPraticApp extends Application 
{ 
private static MultiPraticApp instance; 
public static MultiPraticAppHelper helper; 

public MultiPraticApp() 
{  
    instance = MultiPraticApp.this; 
    helper = new MultiPraticAppHelper(); 
} 

public static Context getContext() 
{  
    return instance; 
} 
} 

class MultiPraticAppHelper 
{ 
private int offsets = 0; 
private int productIndex = 0; 
private int recipeId = 0; 
private Recipe selectedRecipe; 
private Properties configFile; 

public MultiPraticAppHelper() 
{ 
    Context context = MultiPraticApp.getContext();      

    String path = context.getFilesDir() + "/config.properties"; 

    File file = new File(path); 

    try 
    { 
     FileInputStream fis = new FileInputStream(file); 

     Properties properties = new Properties(); 
     properties.load(fis); 

     fis.close(); 
    }catch(Exception ex) 
    { 
     ex.printStackTrace(); 
    } 
} 

私のマニフェストファイル:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="mci.multipratic" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-sdk android:minSdkVersion="4" /> 

<application android:name=".MultiPraticApp"   
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name"> 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" 
     android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" />     
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <activity 
     android:name=".EnableProductsActivity" 
     android:label="@string/app_name" 
     android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen">   
    </activity> 

    <activity 
     android:name=".RecipeSelectionActivity" 
     android:label="@string/app_name" 
     android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen">   
    </activity> 

    <activity 
     android:name=".ProductAdjustsActivity" 
     android:label="@string/app_name" 
     android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" 
     > 
    </activity>    
</application> 

+0

これはエミュレータまたは実際のデバイスで試していますか?この人はそれをエミュレータの問題に追跡しました:http://stackoverflow.com/questions/6779833/getfilesdir-returning-null – CaseyB

+0

ああ、まあ、私はこの質問に行きましたが、私は実際のデバイスを使用しています。 –

+0

この「アクティビティ」はどのように起動していますか?あなたのアプリの主な「アクティビティ」ですか? – CaseyB

答えて

6

私はこの問題は、あなたがコンストラクタで初期化をしようとしていると考えています。コンストラクタ内のコードをApplicationクラスのOnCreateに移動します。

@Override 
public void onCreate() { 
    super.onCreate(); 
    if(instance != null) 
    instance = MultiPraticApp.this; 
    if(helper != null) 
    helper = new MultiPraticAppHelper(); 

} 
+0

ああ、これは、ありがとう。私はちょうど他の方法がうまくいかなかった理由を理解していない。私はコンストラクタが動作していたと確信していました。 –

+1

良いキャッチ!私は逃しました!コンテキストはコンストラクタでは有効ではありません! – CaseyB

+0

Ohhh私は参照してください..これを明確にしていただきありがとうございます! –

関連する問題