Java Android外部内存周期性地为空

Java Android外部内存周期性地为空,java,android,nullpointerexception,Java,Android,Nullpointerexception,我有一个android应用程序,我刚从使用改为: String path = Environment.getExternalStorageDirectory(); 致: 这两个内存位置都是“外部的”(我在有SD卡插槽和没有SD卡插槽的手机上进行测试) 我以前的版本工作得非常好,没有错误,新代码偶尔会抛出空指针异常: java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.File android.con

我有一个android应用程序,我刚从使用改为:

String path = Environment.getExternalStorageDirectory();
致:

这两个内存位置都是“外部的”(我在有SD卡插槽和没有SD卡插槽的手机上进行测试)

我以前的版本工作得非常好,没有错误,新代码偶尔会抛出空指针异常:

java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.File android.content.Context.getExternalFilesDir(java.lang.String)' on a null object reference
它只是周期性地执行此操作的事实表明,有时内置内存的外部部分没有装入,但以前的版本使用的是相同的内存

真的不知道是什么导致了这个问题,任何帮助都表示感谢

一些代码:

public class UploadGPSAlarmReceiver extends BroadcastReceiver {

    private static final String TAG = "MicRecordUploadAlarm";

    TransferUtility mTransferUtility;
    Encryption mEncryption;
    Context mContext;
    String encryptedPath;
    static String folder = "/GPS/";

    @Override
    public void onReceive(Context context, Intent intent) {

        Log.d(TAG, "onReceive: ");

        mContext = context;
        mEncryption = new Encryption();
        mTransferUtility = Util.getTransferUtility(mContext);

        Calendar c = Calendar.getInstance();
        //System.out.println("Current time => " + c.getTime());

        SimpleDateFormat df = new SimpleDateFormat("ddMMyyyy");
        String formattedDate = df.format(c.getTime());

        String path = mContext.getExternalFilesDir(null) + "/videoDIARY/Location/";

        File directory = new File(path);


        if(!directory.exists()){
            directory.mkdirs();
        }

} 
BroadcastReceiver是从我的主活动中调用的,方法在onCreate期间调用:

Intent intent = new Intent(this, UploadGPSAlarmReceiver.class);
因为这只是周期性的,从下面的有用评论(谢谢大家!)中,我推断现在发生的是我的应用程序启动了,一切运行顺利,我的应用程序在一天左右后进入后台,当触发BroadcastReceiver时,传递上下文的主活动不再实例化,应用程序崩溃,因为上下文为null


我可以想出一些方法来处理这个问题,但我会对人们的意见感兴趣,因为最好的方法是什么?我可以将主活动设置为静态实例吗?我可以获取应用程序上下文,而不是使用活动上下文?

看起来
上下文
有时为空。如何以及从何处获取上下文对象?我添加了一些代码@DmitryAkishin…上下文是从调用BroadcastReceiver的位置传递的…我是否做错了什么?只需在Context@cricket_007,是的,我考虑过添加空检查,但是,无论您在哪里使用,都必须检查上下文是否为null,这似乎有点疯狂,特别是因为它被显式地传递给正在使用它的方法。。。。我想我一定是做错了什么,是的,
context.getApplicationContext()
可能会起作用。最好在编写自己的应用程序类之前尝试一下。顺便说一句@GeordieWicks为什么需要MainActivity的静态实例?看起来
context
有时是空的。如何以及从何处获取上下文对象?我添加了一些代码@DmitryAkishin…上下文是从调用BroadcastReceiver的位置传递的…我是否做错了什么?只需在Context@cricket_007,是的,我考虑过添加空检查,但是,无论您在哪里使用,都必须检查上下文是否为null,这似乎有点疯狂,特别是因为它被显式地传递给正在使用它的方法。。。。我想我一定是做错了什么,是的,
context.getApplicationContext()
可能会起作用。最好在编写自己的应用程序类之前尝试一下。顺便说一句@GeordieWicks为什么需要MainActivity的静态实例?
Intent intent = new Intent(this, UploadGPSAlarmReceiver.class);