1

こんにちは素晴らしい人々!

だから、私はいくつかの私が作ったメソッドを使用するこのアクティビティを持っています。そのメソッドにはもちろん他のメソッドが含まれており、それらの他のメソッドはたまたまアンドロイドの一部です。パッケージ。

今のところ変なことはありません....

私は 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

そのメソッドは、コンテキストまたはリソースにアクセスする必要があります。次の 2 つのオプションがあります。

  1. コンテキストを引数としてメソッドに渡す
  2. コンテキストをコンストラクターに渡し、Methodsメンバー フィールドとして保存します。

最初の方法をお勧めします。コードの構造によっては、アクティビティが破棄されて再作成された場合 (たとえば、デバイスの向きが変わったために)、2 番目の方法でメモリ リークが発生する可能性があるためです。最初のメソッドには、メソッドを静的にできるという追加の利点があります。

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 のメソッドです。クラスが 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);

これらのメソッドのいずれかで何らかの種類のダイアログを作成して表示する必要がある場合は、有効な (可視の) アクティビティのコンテキストが必要になることに注意してください。

于 2013-02-22T13:23:15.487 に答える