NullPointerException上下文静态方法

时间:2014-03-01 16:52:00

标签: 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。我认为上下文存在问题,但不知道为什么。

1 个答案:

答案 0 :(得分:1)

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() - 如果您在活动中调用方法
  • getActivity() - 如果你在片段中调用它(注意:在使用之前进行空检查。如果片段没有附加到活动,则getActivity()将返回null)
  • _varWithContextIn - 如果您在setOnClickListener中调用它,其中“this”将成为您正在创建的onClickListener。