【问题标题】:Application context returning null when using getFilesDir()使用 getFilesDir() 时应用程序上下文返回 null
【发布时间】:2012-02-09 18:50:54
【问题描述】:

我不知道为什么会这样。当我检查 DDMS 时也没有文件目录。我正在尝试在我的 Application 子类中访问此文件夹。知道为什么会这样吗? 我需要应用程序上下文是全局的,这样我就可以在不扩展 Activity 的类上使用。

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>  

【问题讨论】:

  • 您是在模拟器还是实际设备上尝试这个?此人将其归结为模拟器问题:stackoverflow.com/questions/6779833/getfilesdir-returning-null
  • 哦,是的,好吧,我遇到了这个问题,但我使用的是实际设备。
  • 你是如何启动这个Activity的?它是您应用中的主要Activity 吗?
  • 是的,主要的Activity 在我的应用程序上。我可以使用任何Activity Context 来访问filesDir。 Activity 在 Manifest 文件中定义。

标签: java android file android-context


【解决方案1】:

我相信问题是你试图在构造函数中进行初始化。将构造函数中的代码移到Application类的OnCreate中。

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

}

【讨论】:

  • 哦,原来是这个,谢谢。我只是不明白为什么其他方式不起作用。我确信构造函数正在运行。
  • 好收获!我错过了! Context 在构造函数中无效!
猜你喜欢
  • 2014-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-16
  • 2013-09-12
  • 2015-04-07
相关资源
最近更新 更多