为什么我不能将 BitmapFactory.decodeResource() 方法用于实用程序 class(不是 activity 的 class)?无法解析方法 getResources()

Why I can't use the BitmapFactory.decodeResource() metod into an utility class (a class that is not an activity)?Cannot resolve method getResources()

我是 Android 开发的新手,我发现在实用程序 class 中使用 BitmapFactory.decodeResource() 方法存在一些问题( class 不是 activity class).

所以我正在对我的代码进行一些重构,我必须移动此代码行:

Bitmap myBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.chef_hat_ok);

从 activity class 方法到我在实用程序中声明的方法 class。

它在 activity class 中运行良好,但将其移至实用程序 class 方法中,如下所示:

public class ImgUtility {

    public Bitmap createRankingImg(int difficulty) {

        // Create a Bitmap image starting from the star.png into the "/res/drawable/" directory:
        Bitmap myBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.chef_hat_ok);
            
        return myBitmap;

    }

}

我在 getResources() 方法上收到一条 IDE 错误消息,IDE 说:

Cannot resolve method 'getResources()'

我认为这是因为 getResources() 方法检索了与 activity class.

相关的内容

查看旧代码我可以看到 getResources() 方法 return 一个 ContextThemeWrapper 对象。我试图在 AppCompatActivity class 中搜索(因为我原来的 activity 扩展了它)但我找不到。

所以我的疑惑是:

  1. 主要问题是:如何在我之前的 ImgUtility[= 中正确使用 BitmapFactory.decodeResource() 方法51=] 班级?

  2. 为什么当我使用 BitmapFactory.decodeResource() 方法时它采用 ContextThemeWrapper 对象 (return由 getResources() 方法编辑)作为参数?究竟是什么代表了这个对象?它与 activity class 或什么有关吗?它在哪里声明?

getResources() 方法在 Context 中可用。您可以在实用程序 class:

中简单地执行此操作
public class ImgUtility {

    public Bitmap createRankingImg(Context context, int difficulty) {

        // Create a Bitmap image starting from the star.png into the "/res/drawable/" directory:
        Bitmap myBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.chef_hat_ok);
        return myBitmap;

    }

}

要回答你的第二个问题,请看这个:

java.lang.Object
   ↳    android.content.Context
       ↳    android.content.ContextWrapper
           ↳    android.view.ContextThemeWrapper
               ↳    android.app.Activity

getResources() 方法实际上存在于 Context class 中。所有继承的 classes 也有 getResources() 方法。因此,当您从 Activity(它是 Context 的子 class)调用 getResources() 时,它很容易被调用。

getResources()其实就是Context里面的一个方法class。 您仍然可以使用 Utils class 通过将上下文对象传递到 Utils class.

来完成此操作

请注意,这会在您的 Utils class 和 Android Context class 之间产生耦合,导致您将无法直接在其他地方重用代码。

关于第二个问题,我无法回答,留给其他人吧。 :)