2012-02-09 14 views
6

kullanırken null döndüren uygulama içeriği, bunun neden olduğunu bilmiyorum. DDMS'yi kontrol ettiğimde dosya dizisi de yok. Bu klasöre Uygulama alt sınıfımda erişmeye çalışıyorum. Bunun neden olduğu hakkında bir fikrin var mı? Global olmak için uygulama bağlamına ihtiyacım var, bu yüzden Etkinliği genişletmeyen sınıflarda kullanabiliyorum.GetFilesDir()

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

Benim bildirim dosyası:

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

Bunu emülatörde veya gerçek bir aygıtta deniyor musunuz? Bu kişi bir emülatör sorununu izledi: http://stackoverflow.com/questions/6779833/getfilesdir-returning-null – CaseyB

+0

Oh yeh, evet, bu soruya ulaştım ama gerçek bir cihaz kullanıyorum. –

+0

Bu "Etkinliği" nasıl başlatıyorsunuz? Uygulamanızda ana "Etkinlik" mi? – CaseyB

cevap

6

Sorunun yapıcı metotta başlatma yapmaya çalışıyorsun olduğuna inanıyoruz. Kodu yapıcıda OnCreate of Application sınıfına taşıyın.

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

} 
+0

Oh, bu oldu, teşekkürler. Diğer yolun neden işe yaramadığını anlamıyorum. Kurucunun çalıştığından emindim. –

+1

İyi yakalama! Onu özledim! İçerik, Yapıcı'da geçerli değildir! – CaseyB

+0

Ohhh Anladım .. bunu açıkladığın için teşekkürler! –