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);

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值