getResources()方法带来的NullPointerException
来源:互联网 发布:电脑桌面时间软件 编辑:程序博客网 时间:2024/06/15 13:55
一.非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
- getResources 带来的 NullPointerException
- getResources()方法
- getResources()方法
- getResources().getColor()方法过时的替代方法
- getResources().getDrawable()方法过时的替代方法
- 过时的getResources().getColor()的替代方法
- kotlin与Spring, 默认类,方法,property为final带来的问题--依赖注入失效,NullPointerException异常
- Context#getResources().getDrawable()方法过时后的替代方法
- Context#getResources().getDrawable()方法过时后的替代方法
- getResources().getDrawable()方法过时后的替代方法
- Android getResources()方法
- 非Activity类引用getResources()方法问题的解决方法
- 非Activity类引用getResources()方法问题的解决方法
- 非Activity类引用getResources()方法问题的解决方法
- 非Activity类引用getResources()方法问题的解决方法
- getResources()方法读取jar包内部的文件
- 解决Android中getResources().getColor()方法过时的问题
- 含括号和四则运算符的简单表达式的计算【c++ 50 lines】
- 特殊IP地址类型
- 套接字和文件描述符
- matrix 2d in CSS3
- thinkphp前台模板运算符
- getResources()方法带来的NullPointerException
- ng-style的用法
- LitePal的一些使用方法
- html的选择器使用
- 在Ubuntu系统中下载Android源码
- stampede上编译c和fortran混编程序multiple definition of `main'问题解决
- PIGCMS weimi 如何关闭聊天机器人
- 程序命名规范
- ns和gt-itm在ubuntu安装及使用