自己创建的非Activity类引用getResources()方法问题的解决方法
2013-12-26 15:39
337 查看
总结下来,最好的方法,是在继承了Activity的一个activity里面声明一个静态类型的mContext:
private static Context mContext;
然后,在onCreate方法里初始化:
mContext = this;
用get方法获取这个mContext:
public static Context getContext() {
return mContext;
}
以上方法,在我的安卓应用里是可以使用的。
以下 from: http://blog.csdn.net/xyzjl/article/details/9285093 发现有错误, 读者自行甄别吧。
在进行Android开发的过程中,在一个非Activity类(此处假设类名为MyNewClass)中引用了getResources()方法,如下:
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.marker_red);
结果错误信息提示:MyNewClass.class中没有getResources()方法。
在百度和Google上各种寻找,没有合适的解决办法。
有人这么解决:
一、改为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()方法问题的解决方法。
顺便附一片帖子,关于Context的。http://www.360doc.com/content/11/0430/11/4154133_113336620.shtml
private static Context mContext;
然后,在onCreate方法里初始化:
mContext = this;
用get方法获取这个mContext:
public static Context getContext() {
return mContext;
}
以上方法,在我的安卓应用里是可以使用的。
以下 from: http://blog.csdn.net/xyzjl/article/details/9285093 发现有错误, 读者自行甄别吧。
在进行Android开发的过程中,在一个非Activity类(此处假设类名为MyNewClass)中引用了getResources()方法,如下:
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.marker_red);
结果错误信息提示:MyNewClass.class中没有getResources()方法。
在百度和Google上各种寻找,没有合适的解决办法。
有人这么解决:
一、改为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()方法问题的解决方法。
顺便附一片帖子,关于Context的。http://www.360doc.com/content/11/0430/11/4154133_113336620.shtml
相关文章推荐
- 自己创建的非Activity类引用getResources()方法问题的解决方法
- 在非Activity类里面启动Intent、Toast等、非Activity类引用getResources()方法问题的解决方法
- 非Activity类引用getResources()方法问题的解决方法
- 非Activity类引用getResources()方法问题的解决方法
- 非Activity类引用getResources()方法问题的解决方法
- Android 非Activity类引用getResources()方法问题的解决方法
- 非Activity类引用getResources()方法问题的解决方法
- rhel6.4 简单创建自己的http web 界面服务遇到的问题和解决方法
- 在类库中创建WCF的引用问题解决方法
- .net开发中自己遇到的问题自己解决的方法总结
- 从其他项目复制cs类文件到新项目后无法引用问题解决方法(开发环境vs2010,asp.net项目)
- Qt+vs2010创建多窗口时,关于每次创建2个窗口的问题的解决方法
- mysql导入导出数据中文乱码解决方法小结(1、navicat导入问题已解决,创建连接后修改连接属性,选择高级->将使用Mysql字符集复选框去掉,下拉框选择GBK->导入sql文件OK;2、phpmyadmin显示乱码的问题也解决,两步:1.将sql文件以utf8的字符集编码另存,2.将文件中sql语句中的字段字符集编码改成utf8,导入OK)
- HBase单机模式配置以及不能创建表问题的解决方法(Caused by: java.net.ConnectException: Connection refused)
- 自己开始学习到遇到问题及解决方法的记录
- 在对话框中动态创建的菜单不能响应UpdeateCommand的问题解决方法
- 用JAXB转换XML和Java对象时的循环引用问题的解决方法
- 关于allegro16.6 orCAD capture CIS 创建网表出现错误的问题解决方法
- 使用myeclispe或者sts工具,创建的myBatis的 xml文件不提示的问题解决方法
- Asp.net页面中引用js文件无效的问题的解决方法