1

你好聪明的人!

所以,我有这个活动,它使用了一些我自己制作的方法,这些方法当然包含其他方法,而那些其他方法恰好是 android.* 的一部分;包裹。

到目前为止没有什么奇怪的......

为了Java,我打算采用模块化并使我的代码更漂亮,所以我认为为什么不将我的方法提取到其他类中,它不是一个Activity子类,它只是一个包含我可以调用的静态方法的容器我的活动……

更准确地说,这是我的方法:

// This function reads a txt file is my MATLAB vector and converts it
// into an Integer[] array for use by the plot function
public Integer[] convertFiletoIntegerArray(int id)
        throws NotFoundException, NumberFormatException {

    List<Integer> vector = new ArrayList<Integer>();

    InputStream in = getResources().openRawResource(id);
    Scanner sc = new Scanner(new InputStreamReader(in));

    while (sc.hasNext()) {

        vector.add(Integer.parseInt(sc.nextLine()));
    }

    Integer[] splVector = vector.toArray(new Integer[0]);
    return splVector;
}

我在我的 Methods.java 类中使用这段代码并裁剪粘贴......

好吧,一开始我将我的方法声明为静态但不断收到此错误:

line 81: InputStream in = getResources().openRawResource(id);

error: The method getResources() is undefined for the type Methods

在我的考虑中,该getResources()方法不能在不是一个Activity或什么的类中使用....

我真的不知道如何解决这个问题,我再次寻求帮助..

谢谢!

4

3 回答 3

1

该方法需要访问上下文或资源。你有两个选择:

  1. 将上下文作为参数传递给方法
  2. 将上下文传递给Methods构造函数并将其保存为成员字段。

我推荐第一个,因为根据您的代码的结构,如果活动被破坏并重新创建(例如,由于设备重新定向),第二个可能会泄漏内存。第一种方法具有允许该方法是静态的额外好处。

public static Integer[] convertFiletoIntegerArray(int id, Context activity)
        throws NotFoundException, NumberFormatException {

    List<Integer> vector = new ArrayList<Integer>();

    InputStream in = activity.getResources().openRawResource(id);
    Scanner sc = new Scanner(new InputStreamReader(in));

    while (sc.hasNext()) {

        vector.add(Integer.parseInt(sc.nextLine()));
    }

    Integer[] splVector = vector.toArray(new Integer[0]);
    return splVector;
}
于 2013-02-22T13:23:02.277 回答
0

我认为您应该在 context 上调用 getResources() 方法。

将上下文作为参数传递给方法

就像打电话一样mContext.getResources()

于 2013-02-22T13:22:46.280 回答
0

getResources()是上下文中的一个方法。由于您的类不再扩展 Context(您之前扩展了 Activity,并且 Activity 扩展了 Context),因此您无法再访问此方法。

为了能够在非 Context 类中调用此类方法,您需要一个 Context 实例,您可以通过该实例获取并存储在您的构造函数中。就像是:

public class Helper {
    Context mContext;

    public Helper(Context context) {
        mContext = context;
    }

    // This function reads a txt file is my MATLAB vector and converts it
    // into an Integer[] array for use by the plot function
    public Integer[] convertFiletoIntegerArray(int id) throws NotFoundException, NumberFormatException {

        List<Integer> vector = new ArrayList<Integer>();

        InputStream in = mContext.getResources().openRawResource(id);
        Scanner sc = new Scanner(new InputStreamReader(in));

        while (sc.hasNext()) {
            vector.add(Integer.parseInt(sc.nextLine()));
        }

        Integer[] splVector = vector.toArray(new Integer[0]);
        return splVector;
    }
}

现在在您的活动中使用它:

Helper helpclass = new Helper(getBaseContext());
helpclass.convertFiletoIntegerArray(YourID);

请注意,如果这些方法中的任何一个需要创建和显示任何类型的对话框,您将需要有一个有效的(可见的)Activity 的上下文。

于 2013-02-22T13:23:15.487 回答