getResources()方法带来的NullPointerException

getResources()方法带来的NullPointerException一.非Activit类引用getResources()方法    在进行Android开发的过程中,在一个非Activity类(TestClass)中引用了getResources()方法,如下:    Bitmapbmp=BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher);   

getResources()方法带来的NullPointerException

一.非Activit类引用getResources()方法

      在进行Android开发的过程中,在一个非Activity类(TestClass)中引用了getResources()方法,如下:

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

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

     在Acitivity里面作如下改动:

      public static Resources resourcesInstance;
      resourcesInstance=this.getResources();

      TestClass这么引用:

     Bitmap bitmap = BitmapFactory.decodeResource(MainActivity.resourcesInstance, R.drawable.ic_launcher);
    这样来,代码没有错,但是运行出现了NullPointerException的程序运行崩溃的情况。

    虽然问题没有解决,但是看到这样两句话:

    在类的构造函数中传一个Context(如Activity或者Application,Service)进来”和“android.content.Context,getResources建立在Activity基础之上”。

    受此启发,解决办法如下:

   在TestClass.中创建getResources()方法:

    private Resources getResources() {

    // TODO Auto-generated method stub
    Resources mResources = null;
    mResources = getResources();
    return mResources;
    }

你会发现错误没有了,而且运行结果正常。


二.Activity类中引用getResources()方法

     比如在MainActivitry中定义了buildcade( String s)方法,该方法的功能是生成二维码,具体代码如下:

public Bitmap buildcade( String s) {

mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
       // 缩放图片
       Matrix m = new Matrix();
       float sx = (float) 2*IMAGE_HALFWIDTH / mBitmap.getWidth();
       float sy = (float) 2*IMAGE_HALFWIDTH / mBitmap.getHeight();
       m.setScale(sx, sy);
       // 重新构造一个40*40的图片
       mBitmap = Bitmap.createBitmap(mBitmap, 0, 0, mBitmap.getWidth(),
               mBitmap.getHeight(), m, false);
       try {

           //这里的string最好提到外面,写成QRcode生成的输入参数,这样更普适;
        //.imageview.set
        endBitmap=cretaeBitmap(new String(s.getBytes(),
                   “ISO-8859-1”));
       } catch (WriterException e) {

           e.printStackTrace();
       } catch (UnsupportedEncodingException e) {

           e.printStackTrace();
       }
return endBitmap;
}

虽然在MainActivity中调用该方法可以正常运行,但在另一Activity中(TestActivity)中调用该方法,则会报空指针异常错误。解决办法是在buildcade( Context context,String s)方法传入conttext。代码如下:

   public Bitmap buildcade(Context context, String s) {

//getResource是Context的方法,要先传入Context对象,再用这个Context调用getResource,
//获得Resource对象。故buildcade()方法中传了一个context对象,否则会报空指针异常
mBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_launcher);
       // 缩放图片
       Matrix m = new Matrix();
       float sx = (float) 2*IMAGE_HALFWIDTH / mBitmap.getWidth();
       float sy = (float) 2*IMAGE_HALFWIDTH / mBitmap.getHeight();
       m.setScale(sx, sy);
       // 重新构造一个40*40的图片
       mBitmap = Bitmap.createBitmap(mBitmap, 0, 0, mBitmap.getWidth(),
               mBitmap.getHeight(), m, false);
       try {

           //这里的string最好提到外面,写成QRcode生成的输入参数,这样更普适;
        //.imageview.set
        endBitmap=cretaeBitmap(new String(s.getBytes(),
                   “ISO-8859-1”));
//            imageview.setImageBitmap(endBitmap);
       } catch (WriterException e) {

           e.printStackTrace();
       } catch (UnsupportedEncodingException e) {

           e.printStackTrace();
       }
return endBitmap;
}

MainActivitry中调用的方法:resultmap = buildcade(MainActivity.this,contents);

在TestActivity中调用的方法:MainActivity result = new MainActivity();       //创建一个对象
                                      resultmap = result.buildcade(TestActivity.this,MainActivity.contents);

今天的文章getResources()方法带来的NullPointerException分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/32287.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注