2012-02-09 4 views
6

왜 이런 일이 발생하는지 알 수 없습니다. DDMS를 검사 할 때 파일이 없습니다. 내 응용 프로그램 하위 클래스에서이 폴더에 액세스하려고합니다. 왜 이런 일이 일어나는 지 아십니까? Activity를 확장하지 않는 클래스에서 사용할 수 있도록 전역으로 응용 프로그램 컨텍스트가 필요합니다.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 나는 본다 이것을 명확히하기를위한 감사합니다! –

관련 문제