zoukankan      html  css  js  c++  java
  • Android 非Activity类引用getResources()方法问题的解决方法

      在进行Android开发的过程中,在一个非Activity类(此处假设类名为MyNewClass)中引用了getResources()方法,如下:

    Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.marker_red);

    结果错误信息提示:MyNewClass.class中没有getResources()方法。

    在百度和Google上各种寻找,没有合适的解决办法。

    有人这么解决:

    可以传递指针给你的activity,在其中你调用getApplicationContext()方法就行了,或者你想用getContext()也可以。

    一、改为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()方法问题的解决方法。

     

  • 相关阅读:
    java学习day08--面向对象--继承+方法重写+static关键字
    java学习day07--面向对象--封装+this关键字+构造器
    java学习day06-面向对象--类和对象
    依赖管理
    NSQ消息队列
    logger包
    time包
    fmt包
    Go_Protobu
    Go_性能优化
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/4229169.html
Copyright © 2011-2022 走看看