我有一个名为FirstClass的Activity类,以及一个名为SecondClass的简单Java类。

在FirstActivity内部,我想像这样创建SecondClass的新对象:

SecondClass secondClass = new SecondClass();


在SecondClass内部,我打算访问Assets文件夹并处理JSON文件,然后通过方法返回结果。

AssetManager assetManager = getResources().getAssets();
InputStream stream = assetManager.open("myJson.json");


但是我遇到了错误,如何解决?

最佳答案

这是因为getResources()是Context的方法,它是Activity的父类。因此,每当您尝试在活动中调用以下代码时:

AssetManager assetManager = getResources().getAssets();


它与:

AssetManager assetManager = YourActivity.this.getResources().getAssets();


YourActivity.this是上下文。

但是,当您尝试从不是Context的子类的类中调用它时,它将为您提供method not found的错误。您需要从Context派生您的类或将上下文传递给您的类。

像这样:

public class SecondClass {

  private Context mContext;

  public SecondClass(Context context) {
    mContext = context;
  }

  // then use it on your method
  public void doSomethingWithAsset() {
    AssetManager assetManager = mContext.getResources().getAssets();
    InputStream stream = assetManager.open("myJson.json");
  }
}

07-24 19:49