【问题标题】:Why can't I access to assets folder from a simple java class?为什么我不能从一个简单的 java 类访问 assets 文件夹?
【发布时间】:2014-10-27 07:41:49
【问题描述】:

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

在 FirstActivity 内部,我想创建一个 SecondClass 的新对象,如下所示:

SecondClass secondClass = new SecondClass();

在SecondClass里面,我打算访问Assets文件夹,处理一个JSON文件,然后通过方法返回结果。

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

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

【问题讨论】:

  • 编译器不知道您试图在简单的 java 类中获取哪些资源。您需要来自Activitycontext 项目,您需要从中获取资源。这就是为什么在活动中,您没有收到错误,并且当您从 Activity 传递资源对象时,您再次没有收到错误,因为编译器知道上下文并获取了资源。
  • 他的问题是正常的,我不知道为什么有些人不赞成他。是老人对新手的污名吗?

标签: java android android-assets


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    要访问您的 SecondClass 中的资源,您需要一个 Context 的实例。

    首先,将Context 的实例传递给SecondClass:

    private Context context;
    
    public SecondClass(Context context)
    {
        this.context = context;
        // the rest of your codes ...
    }
    

    然后使用以下代码访问assets

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-28
      • 2019-05-22
      • 2015-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-03
      相关资源
      最近更新 更多