为什么我不能将 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 扩展了它)但我找不到。
所以我的疑惑是:
主要问题是:如何在我之前的 ImgUtility[= 中正确使用 BitmapFactory.decodeResource() 方法51=] 班级?
为什么当我使用 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 之间产生耦合,导致您将无法直接在其他地方重用代码。
关于第二个问题,我无法回答,留给其他人吧。 :)
我是 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 扩展了它)但我找不到。
所以我的疑惑是:
主要问题是:如何在我之前的 ImgUtility[= 中正确使用 BitmapFactory.decodeResource() 方法51=] 班级?
为什么当我使用 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 之间产生耦合,导致您将无法直接在其他地方重用代码。
关于第二个问题,我无法回答,留给其他人吧。 :)