我有一个名为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()值,我的问题已经解决了。
请原谅我的英语不足
答案 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中的资源,请使用:
Context
的实例传递给SecondClass:
public SecondClass (Context context){
// save context
mContext=context;
}
AssetManager assetManager = context .getAssets();
InputStream stream = assetManager.open("myJson.json");