我一直在尝试在非活动类中使用getResources。我在这里找到了一些如何做到这一点的建议。为了使用Lilzilala建议的方法之一(有多种,但大多建议相同的东西(,我创建了一个特殊的类,用它将资源指定为";res";,然后使用";新的";在一行中调用";getResources";。
然而,我得到了一个";无法解析方法getResources";"错误";getResources";。我有点傻,但不知道为什么会发生这种事。据我所知,当根本没有该名称的资源可用时,就会发生此错误。这让我觉得Resources默认情况下可能不包含getResources((?
class executeTrimmer<Resdefine> {
public class ResDefine {
private Resources res;
public ResDefine(Resources res)
{
this.res = res;
}}
Bitmap img1 = BitmapFactory.decodeResource(new ResDefine(getResources()),
R.drawable.bmpname);
}
编辑-以下建议我添加上下文,我已经尝试过了:
class executeTrimmer<Resdefine> {
private static Context context;
public executeTrimmer(Context context){
this.context = context;
}
public class ResDefine {
private Resources res;
public ResDefine(Resources res)
{
this.res = res;
}}
Bitmap img1 = BitmapFactory.decodeResource(new ResDefine(executeTrimmer.context.getResources),
R.drawable.bmpname);
但这仍然带来错误";无法解析符号getResources";。我尝试了多种不同的方法来传递上下文,但始终面临相同的错误。
正如您在官方文档中看到的,"getResources">是Context的方法,因此不能从任何地方调用它,也不能静态调用。此方法需要一个上下文实例。
在您的情况下,您必须至少向类传递一个上下文,以便能够调用它作为下一个:
context.getResources()
我想你会因为看到它在Activities内部被直接调用而没有前缀上下文而感到困惑,但由于所有Activities实际上都是一个上下文,这就是为什么没有前缀的原因。
澄清。当在活动内部调用时,这是:
getResources()
与此相同:
this.getResources()
其中前缀"strong";这个"指的是活动,而活动本身就是一个上下文。
另一方面,您的代码应该像next一样,没有ResDefine类。请注意,decodeResource调用需要在方法内部,而不是在类级别的范围内(这在Java中是不允许的(。事实上,你甚至不需要使用上下文,所以从调用者的类中传递Resources实例,该类应该保存上下文:
public class executeTrimmer {
private final Resources res;
public executeTrimmer(final Resources res) {
this.res= res;
}
public void loadBitmap()
Bitmap img1 = BitmapFactory.decodeResource(this.res, R.drawable.bmpname);
........
}
}
对于调用者来说,接下来是一个非常天真的示例,因此可能会有一个想法:
public class MainActivity extends Activity {
@Override
protected void onCreate(@Nullable final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
new executeTrimmer(this.getResources()).loadBitmap();
}
}