为什么我无法从一个简单的java类访问assets文件夹

时间:2014-10-27 07:41:49

标签: java android android-assets

我有一个名为First的活动类(例如),我有一个名为Second的Java类(例如)

  

首先扩展活动。第二个是简单的java类。 !!

在FirstActivity内部我想从SecondClass创建一个新对象,如下所示: SecondClass secondClass = new SecondClass();

在SecondClass中,我想访问Assets文件夹并处理Json文件,然后通过方法返回结果 我在第二类内部访问资产文件夹,如下所示:

  

AssetManager assetManager = getResources()。getAssets();的InputStream   stream = assetManager.open(“myJson.json”);

但是我遇到了一个问题:无法解析方法getResources()。 !为什么? 解决它我延伸形式活动!和getResources下的红线已被删除。

但是当我再次调试应用程序时,我遇到了一个问题。

我的问题是:我们可以从活动类中创建一个新对象吗? 我们可以通过简单的java类(不是活动)访问资产文件夹或其他文件夹

注意:最后我向SecondClass添加了一个构造函数,并传递了一个getResources()。getAssets()值,我的问题已经解决了。

请原谅我的英语不足

2 个答案:

答案 0 :(得分:1)

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

AssetManager assetManager = getResources().getAssets();

与以下相同:

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

YourActivity.this是上下文。

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

类似这样的东西:

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");
  }
}

答案 1 :(得分:0)

您需要Context类的实例来访问SecondClass中的资源,请使用:

  1. Context的实例传递给SecondClass:
    
    public SecondClass (Context context){
    // save context 
    mContext=context;
    }
  2. 使用此功能访问资产:
    AssetManager assetManager = context .getAssets(); 
    InputStream stream = assetManager.open("myJson.json");