2012-02-09 12 views
6

No sé por qué ocurre esto. Cuando reviso el DDMS no hay archivos dir también. Estoy intentando acceder a esta carpeta en mi subclase de aplicación. ¿Alguna idea de por qué está pasando esto? Necesito que el contexto de la aplicación sea global para que pueda usar en clases que no extienden la actividad.Contexto de la aplicación que devuelve nulo al usar 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(); 
    } 
} 

Mi archivo de manifiesto:

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

¿Está probando esto en el emulador o en un dispositivo real? Esta persona lo rastreó hasta un problema con el emulador: http://stackoverflow.com/questions/6779833/getfilesdir-returning-null – CaseyB

+0

Oh, sí, bueno, llegué a esta pregunta, pero estoy usando un dispositivo real. –

+0

¿Cómo estás lanzando esta 'Actividad'? ¿Es la 'Actividad' principal en tu aplicación? – CaseyB

Respuesta

6

Creo que el problema es que están tratando de hacer la inicialización en el constructor. Mueva el código en el constructor a OnCreate of Application class.

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

} 
+0

Oh, fue esto, gracias. Simplemente no entiendo por qué la otra forma no funcionó. Estaba seguro de que el constructor se estaba ejecutando. –

+1

¡Buena captura! ¡Me lo perdí! ¡El contexto no es válido en el Constructor! – CaseyB

+0

Ohhh ya veo ... ¡gracias por aclarar esto! –

Cuestiones relacionadas