在继承activity类之外的类中使用getResource()时候出现的问题解决

有几次写代码的时候都碰到了这个getResource()的使用,当时把它写在了一个普通类当中,用来加载assets当中的图片,但是代码报错。后来发现是由于这个方法是需要context的,但是最初急忙着写而没有仔细的理解,结果折腾半天也不知道怎么修改传递这个context过来,最后为了逃避这个问题,就把它放到了继承activity的类里面去了。

现在又遇到了这个问题,这下必须解决他了。

其实只要在方法调用连传context参数 或者在构造函数里面搞定 就行了:

大致代码如下:

/**
 * 从assets是中加载图像资源
 * 后期优化代码中的gridview 使用baseadapter的时候使用这种方式加载图片资源
 * */
package com.example.changeyouvioce.util;

import java.io.IOException;
import java.io.InputStream;

import com.example.changeyourvioce.VoiceChangeActivity;

import android.content.Context;
import android.content.res.AssetManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;

public class GridViewResource {
    private Context context;
    private final static int MAX_RESOURCE_LENGTH = 18;
    public Bitmap[] mBitmapArray = null;

    public GridViewResource(Context context){
        this.context = context;
    }
    //将图像资源装载到bitmap数组
    public Bitmap[] fillBitmapArray(){
        String Name = "gridtn";
        mBitmapArray = new Bitmap[MAX_RESOURCE_LENGTH];
        for (int i = 0; i < MAX_RESOURCE_LENGTH; i++) {
            int nameNum = i;
            String fileName = Name + String.valueOf(nameNum);
            Log.e("fileName", fileName);
            mBitmapArray[i] = loadFromAsset(context, fileName);
        }
        return mBitmapArray;
    }
    //从assets加载图像资源
    private Bitmap loadFromAsset(Context context,String fileName){
        Bitmap mBitmap = null;
        Log.e("loadFromAsset", "execute");

        AssetManager am = context.getResources().getAssets();
        Log.e("loadFromAsset", "execute ??");

        try {
            InputStream is = am.open(fileName);
            mBitmap = BitmapFactory.decodeStream(is);
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return mBitmap;
    }

}

在activity当中调用的代码:

protected void onCreate(Bundle savedInstanceState) {
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    ~~~~~~~~~~~~~~~~~

        mGridViewResource = new GridViewResource(this);
        mBitmap = mGridViewResource.fillBitmapArray();
~~~~~
}
时间: 2024-10-20 02:01:31

在继承activity类之外的类中使用getResource()时候出现的问题解决的相关文章

C++ Primer 学习笔记_65_面向对象编程 --概述、定义基类和派生类

面向对象编程 --概述.定义基类和派生类 引言: 面向对象编程基于的三个基本概念:数据抽象.继承和动态绑定. 在C++中,用类进行数据抽象,用类派生从一个类继承另一个:派生类继承基类的成员.动态绑定使编译器能够在运行时决定是使用基类中定义的函数还是派生类中定义的函数. 继承和动态绑定在两个方面简化了我们的程序:[继承]能够容易地定义与其他类相似但又不相同的新类,[派生]能够更容易地编写忽略这些相似类型之间区别的程序. 面向对象编程:概述 面向对象编程的关键思想是多态性(polymorphism)

C++ Primer 学习笔记_65_面向对象编程 -概述、定义基类跟派生类

面向对象编程 --概述.定义基类和派生类 引言: 面向对象编程基于的三个基本概念:数据抽象.继承和动态绑定. 在C++中,用类进行数据抽象,用类派生从一个类继承另一个:派生类继承基类的成员.动态绑定使编译器能够在运行时决定是使用基类中定义的函数还是派生类中定义的函数. 继承和动态绑定在两个方面简化了我们的程序:[继承]能够容易地定义与其他类相似但又不相同的新类,[派生]能够更容易地编写忽略这些相似类型之间区别的程序. 面向对象编程:概述 面向对象编程的关键思想是多态性(polymorphism)

android开发中关于继承activity类中方法的调用

android开发中关于继承activity类中的函数,不能在其他类中调用其方法. MainActivity.java package com.example.testmain; import android.app.Activity; import android.os.Bundle; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState)

在一个继承Activity的类中,不能同时让onCreate和构造函数同时出现吗?

在一个继续Activity的类中,不能同时让onCreate和构造函数同时出现吗?? 参考:http://bbs.csdn.net/topics/390321638 如果不能,原因为何? 如果能,为什么会出现错误? 先看一下java 的例子. //A.java public class A { public A() { System.out.println("===a 构造====="); } } /B.java public class B { static A a = new A(

【Java面试题】60 接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)? 抽象类中是否可以有静态的main方法?

接口可以继承接口.抽象类可以实现(implements)接口,抽象类可以继承具体类.抽象类中可以有静态的main方法. 问:  抽象类是否可继承实体类 (concrete class) 答: 抽象类是可以继承实体类,但前提是实体类必须有明确的构造函数. 答案很明确,可以继承.其实从Object就是个实体类,Java的API文档里,每个抽象类的条目里都明确写着直接或间接继承自Object,所以这点是没有疑问的. 关键在于这答案里所说的"前提是实体类必须有明确的构造函数"一句,是什么意思.

基于继承类的属性模版中无法绑定的原因和解决方法

这个的晚上想学学WPF 做一个类似于ERP 左边菜单.构思一下思路 ...... 创建一个类基于Expander类. 1 public class ExpanderBox : Expander 2 { 3 #region 定义依赖属性 4 5 6 //定义ItemsSource数据源 7 public static readonly DependencyProperty ItemsSourcesProperty = DependencyProperty.Register("ItemsSource

【python】-- 类的多继承、经典类、新式类

继承知识点补充 在python还支持多继承,但是一般我们很少用,有些语言干脆就不支持多继承,有多继承,就会带来两个概念,经典类和新式类. 一.多继承 之前我们都是讲的单继承,那么什么是多继承呢?说白了,就是:子类可以继承多个父类,就叫多继承. class SchoolMember(object): #SchoolMember类 '''学校成员基类''' def tell(self): print("the schoolmeber is tell...") class School(ob

java中常用的包、类、以及包中常用的类、方法、属性-----io包

由于最近有需要,所以下面是我整理的在开发中常用的包.类.以及包中常用的类.方法.属性:有需要的看看 java中常用的包.类.以及包中常用的类.方法.属性 常用的包 java.io.*; java.util.*; java.lang.*; java.math.*; java.sql.*; java.text.*; java.awt.*; javax.swing.*;   包名 接口 类 方法 属性 java.io.*; java.io.Serializable实现序列化 java.io.Buffe

从设计基类及其派生类看继承关系

继承能够定义可重用.扩展或修改父类行为的子类.但基类的静态构造函数.实例构造函数和析构函数不能被派生类继承. 在下面实例中,定义一个基类Publication用于表示任何类型的出版物以及派生至Publication的其他类型Book类,由此也可以扩展为定义其他类型如:Magazine.Journal.Newspaper和Article. 在设计基类Publication时我们必须考虑到如下关系: 1.要在基类中添加哪些成员 2.基类是否用作派生类模板的抽象基类 3.类层次结构的扩展空间大小,要开