【问题标题】:Can't getApplicationContext. because java.lang.NullPointerException无法获取应用程序上下文。因为 java.lang.NullPointerException
【发布时间】:2016-05-30 15:23:56
【问题描述】:

我想要可以从应用程序中的任何位置调用以写入文件的 make 机制。

我下一节课:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import android.content.Context;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;

import android.app.Activity;
import android.os.Environment;
import android.util.Log;
import android.content.Context;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class LogFile  extends Activity {

    public void writeFile(String msg)
    {
        Log.d("writeFile", "writeToFile");

        try {
            Context context = getApplicationContext();
            FileOutputStream fos = context.openFileOutput("log.txt", Context.MODE_PRIVATE);
            OutputStreamWriter osw = new OutputStreamWriter(fos);
            BufferedWriter outputStream = new BufferedWriter(osw);
            outputStream.write(msg);
            outputStream.close();

        }  catch (FileNotFoundException e) {
            e.printStackTrace();
            Log.d("writeFile", "File not found");
        } catch (NullPointerException e) {
            e.printStackTrace();
            Log.d("writeFile", "NullPointerException");
        } catch (IOException e) {
            e.printStackTrace();
            Log.d("writeFile", "File problems");
        }
    }
} 

但是在这一行 Context context = getApplicationContext(); 我有错误

W/System.err: java.lang.NullPointerException
 W/System.err:     at android.content.ContextWrapper.openFileOutput(ContextWrapper.java:185)
 W/System.err:     at com.example.tracklogger.LogFile.writeFile(LogFile.java:37)        

【问题讨论】:

  • 捕获 NullPointerExceptions 通常意味着你做错了什么......但是,我不知道为什么 getApplicationContext 会导致一个
  • 试试这个....代码行... Context context = LogFile.this;
  • 你从哪里调用这个方法? Activity 是在那个时候开始的吗?
  • 这是一个活动,我看不到您在哪里覆盖 onCreate()。还应该提到您可能会考虑扩展 AppCompatActivity
  • @ExceptionLover 这没有意义,这段代码是 LogFile 的一部分。这是一个上下文。

标签: java android nullpointerexception android-context


【解决方案1】:

我不确定这是解决您的问题或使其发挥作用的“正确”方法。 我认为问题在于您正在传递 Activity 上下文的值(这是 null,因此它会抛出该异常)并且您需要应用程序的上下文。

就我个人而言,我解决了一个类似的问题如下:

GlobalVars.java 文件,包含所有“全局变量”,如应用程序上下文(不是 Activity 的上下文):

public class GlobalVars extends Application {
public static Context context;

   @Override public void onCreate() {
      super.onCreate();
      context = getApplicationContext();
   }
}

取自这里:Getting the Application Context

祝你好运,编码愉快!

【讨论】:

  • 您还需要将该类作为应用程序添加到清单中
猜你喜欢
  • 1970-01-01
  • 2012-01-19
  • 2018-11-11
  • 2011-10-31
  • 2016-02-11
  • 2016-12-13
  • 1970-01-01
  • 2010-09-12
相关资源
最近更新 更多