"Cannot resolve method getResources"尝试使用此处广泛提倡的方法在非活动方法中执行getResources时



我一直在尝试在非活动类中使用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();
}
}

相关内容

最新更新