getresources

时间:2025-12-18 13:55:25编辑:莆田seo君

Android开发中,如何在静态类中使用getResources()获取图片资源.

获取resource需要context对象,所以你这个问题有如下几个解决思路
1,使用Context作为参数,例如public static getResourcesStatic(Context context, int resId)
2,使用Context作为成员变量,在构造函数中接受一个Context参数,并赋值给自己成员变量
这样在此对象生命期内,都可以使用.
不过并不推荐这种做法,因为传入的Context多数情况下是Activity,往往会附着很多资源,如背景图片等,无法GC,导致过高的内存占用.可以用下面的改进方式:
3,使用WeakReference保存context的弱引用
使用时要注意判断ref.get()是否为null


怎么在Activity之外类里面用getResources()??

  一、改为Bitmap bmp = BitmapFactory.decodeResource(Context.getResources(), R.drawable.marker_red);和Bitmap bmp = BitmapFactory.decodeResource(this.getResources(), R.drawable.marker_red);都不行。
  如果你试了,就知道不行(反正我的不行,但是如果在Activity类中应该是可以的)。
  二、在Acitivity里面作如下改动:
  public static Resources resourcesInstance;
resourcesInstance=this.getResources();

  MyNewClass.class这么引用:

  Bitmap bitmap = BitmapFactory.decodeResource(MyActivity.resourcesInstance, R.drawable.test);
这样来,代码没有错,但是是出现了NullPointerException的程序运行崩溃的情况。
  虽然问题没有解决,但是看到这样两句话:
  “在类的构造函数中传一个Context(如Activity或者Application,Service)进来”和“android.content.Context,getResources建立在Activity基础之上”。
  受此启发,找到两种解决办法:
  方法一:在MyNewClass.class中创建getResources()方法:
  private Resources getResources() {
// TODO Auto-generated method stub
Resources mResources = null;
mResources = getResources();
return mResources;
}
  你会发现错误没有了,而且运行结果正常。
  方法二:在MyActivity.class的构造函数中进行Context传递。声明一个Context,并且构造方法getContext()。具体代码如下:
  在MyActivity.class中进行Context传递:
  public class MyActivity extends Activity {
private static Context Context = null;
  @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
  setContentView(R.layout.view);
  ‍ public static Context getContext() {
return Context;
}
  在MyNewClass.class进行方法的引用:
  Bitmap bmp = BitmapFactory.decodeResource(MyActivity.getContext().getResources(), R.drawable.marker_red);

  --------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  以上,就是针对自己创建的非Activity类引用getResources()方法问题的解决方法。


上一篇:音速隆隆官网

下一篇:没有了