android - NullPointerException 上下文静态方法

标签 android static fragment android-context

我有一个类使用其他类的静态方法

public class ArticleFragment extends Fragment {
    ...
    // use static method to get text from file
    String articleString = FileRead.readRawTextFile();
    article.setText(articleString);
    ...
}

然后我用这个方法上课

public class FileRead extends Application {

  private static Context ctx;

  @Override
  public void onCreate() {
      super.onCreate();
      ctx = this;
  }

  public static Context getContext(){
      return ctx;
  }

  public static String readRawTextFile()
  {
      InputStream inputStream = null;
      StringBuilder text = new StringBuilder();     
      try {
          //****  E R R O R ***********************
          inputStream = FileRead.getContext().getResources().openRawResource(R.raw.plik);
          //***************************************
          InputStreamReader inputreader = new InputStreamReader(inputStream);
          BufferedReader buffreader = new BufferedReader(inputreader);
          String line;
          while (( line = buffreader.readLine()) != null) {
              text.append(line);
              text.append('\n');
          }
          return text.toString();
      } catch (Exception e) {
          Log.e("APP", "*** "+e, e);
          return null;
      }
  }
}

我收到错误 NullPointerException。 文件在 res/raw 中。我认为上下文有问题,但不知道为什么。

最佳答案

donfuxx 是对的; FileRead.getContext() 为空。

但是我们仍然可以获得上下文!将其作为参数传递给 readRawTextFile()

于是变成了:

public static String readRawTextFile(Context context);

然后将 FileRead.getContext() 更改为

inputStream = context.getResources().openRawResource(R.raw.plik);

然后将您的方法调用更改为:

String articleString = FileRead.readRawTextFile(context);

将上下文替换为

  • this 或 this.getContext() - 如果您在 Activity 中调用方法
  • getActivity() - 如果您在 fragment 中调用它(请注意:在使用前进行 null 检查。如果 fragment 未附加到 Activity ,getActivity() 将返回 null)
  • _varWithContextIn - 如果您在 setOnClickListener 中调用它,其中“this”成为您正在创建的 onClickListener。

关于android - NullPointerException 上下文静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22117272/

相关文章:

java - 调用 replace() 时 fragment 的生命周期是什么?

java - 我如何以一种干净的方式创建由外键与 Room DB 相关的行和子项?

java - 静态在多线程环境中如何工作?

android - 打开某些 fragment 时如何隐藏/显示工具栏上的图标

android - 在带有动画的 fragment 之间切换时出现白色空白屏幕

java - java中私有(private)构造函数有什么用?

java - Google Maps API 上的 ZoomControls - 如何将它移动到 ButtonBar 上方?

android - android中的警告对话框

java - 未知模式字符 'x' ,使用 SimpleDateFormat 时

c++ - 在全局范围内调用静态方法