一.非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