求助!android开发 如何在一个普通类中使用getResources()方法!
方法一:重写此类的构造方法,在其他页面调用的时候,传入Context,直接利用
Context.getResources()
方法二:通过全局的application来获取
//QDApplicationContext为自定义的application,getInstance()用来获取实例对象
QDApplicationContext.getInstance().getResources()
方法三:不用重写构造方法,直接在你需要调用的方法里面传入Context即可,如:
public void setSomething(Context con){
String a = con.getResources().getString(R.String.activity_name);
...
}
java的ClassLoader的getResources方法怎么使用
API文档:
getResourcespublic Enumeration getResources(String name)
throws IOException
查找所有给定名称的资源。资源是可以通过类代码以与代码基无关的方式访问的某些数据(图像、声音、文本等)。
资源名称是以 '/' 分隔的标识资源的路径名称。getResource(String) 的文档中描述了搜索顺序。
参数:
name - 资源名称
返回:
资源的 URL 对象的枚举。如果找不到资源,则该枚举将为空。类加载器无权访问的资源不在此枚举中。
抛出:
IOException - 如果发生 I/O 错误
Android开发中,如何在静态类中使用getResources()获取图片资源.
获取resource需要context对象,所以你这个问题有如下几个解决思路
1,使用Context作为参数,例如public static getResourcesStatic(Context context, int resId)
2,使用Context作为成员变量,在构造函数中接受一个Context参数,并赋值给自己成员变量
这样在此对象生命期内,都可以使用.
不过并不推荐这种做法,因为传入的Context多数情况下是Activity,往往会附着很多资源,如背景图片等,无法GC,导致过高的内存占用.可以用下面的改进方式:
3,使用WeakReference保存context的弱引用
使用时要注意判断ref.get()是否为null
怎么在Activity之外类里面用getResources()??
一、改为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()方法问题的解决方法。
java怎么使用自己的classloader
ClassLoader: ClassLoader是一个抽象类,一般的系统有一个缺省的ClassLoader用来装载Class, 用ClassLoader.getSystemClassLoader()可以得到。不过有时候为了安全或有其它的特殊需要可以自定义自己的ClassLoader来进行loader一些需要的Class, 比如有的产品它用了自己的ClassLoader可以指定Class只从它指定的特定的JAR文件里面来loader,如果想通过覆盖ClassPath方法来想让它用Class是行不通的。 有兴趣的可以参照Java API 的更详细的用法说明。
Android中ClassLoader和java中有什么关系和区别
1源 ClassLoader 先判断该 Class 是否已加载,如果已加载,则直接返回 Class,如果没有则委托给父类加载器。
2父类加载器判断是否加载过该 Class,如果已加载,则直接返回 Class,如果没有则委托给祖父类加载器。
依此类推,直到始祖类加载器(引用类加载器)。
3始祖类加载器判断是否加载过该 Class,如果已加载,则直接返回 Class,如果没有则尝试从其对应的类路径下寻找 class 字节码文件并载入。如果载入成功,则直接返回 Class,如果载入失败,则委托给始祖类加载器的子类加载器。
4始祖类加载器的子类加载器尝试从其对应的类路径下寻找 class 字节码文件并载入。如果载入成功,则直接返回 Class,如果载入失败,则委托给始祖类加载器的孙类加载器。
5依此类推,直到源 ClassLoader。
6源 ClassLoader 尝试从其对应的类路径下寻找 class 字节码文件并载入。如果载入成功,则直接返回 Class,如果载入失败,源 ClassLoader 不会再委托其子类加载器,而是抛出异常。
android的getResources()报错如何解决?
在AndroidStudio的Library工程目录下build.gradle同级目录添加文件"public-xml.gradle"。在Library的build.gradle文件中添加如下内容:apply from: 'public-xml.gradle' 。在AndroidStudio的app主工程的build.gradle同级目录下添加文件"public-xml.gradle" 。 这个脚本与Library中脚本的唯一区别就是applicationVariants和libraryVariants。在app的build.gradle文件中添加如下内容:apply from: 'public-xml.gradle' 。然后,重新rebuild工程即可(核实AndroidStudio生成的R文件与public.xml文件中ID一致)。
android的getResources()报错
在AndroidStudio的Library工程目录下build.gradle同级目录添加文件"public-xml.gradle"。在Library的build.gradle文件中添加如下内容:apply from: 'public-xml.gradle' 。在AndroidStudio的app主工程的build.gradle同级目录下添加文件"public-xml.gradle" 。 这个脚本与Library中脚本的唯一区别就是applicationVariants和libraryVariants。在app的build.gradle文件中添加如下内容:apply from: 'public-xml.gradle' 。然后,重新rebuild工程即可(核实AndroidStudio生成的R文件与public.xml文件中ID一致)。