0

クラスGolferDBManagerのメソッドが、SQLLite データベースから構築しているオブジェクトの配列を返すようにしたいと考えています。配列を作成しようとすると、メソッドでSource Not Foundエラーが発生します。

    public Golfer[] retrieveGolfers(){
    String[] columns = new String[]{"golfer_name", "golfer_init", "usga_index"};
    Cursor cursor = db.query(true, DB_TABLE, columns, null, null, null, null, null, null, null);
    cursor.moveToFirst();
    int i = 0;
    while (cursor.isAfterLast() == false) {
        Golfer tGolfer = new Golfer(cursor.getString(0), cursor.getString(1), cursor.getFloat(2));
        lGolfers[i] = new Golfer(cursor.getString(0), cursor.getString(1), cursor.getFloat(2));
        cursor.moveToNext();
    }  
    if (cursor != null && !cursor.isClosed()) {
        cursor.close();
    }
    return lGolfers;
}

lGolfersは、上記のクラス定義で次のように定義されています。

public class GolferDBManager {
 public static final String DB_NAME = "golfgames";
 public static final String DB_TABLE = "golfers";
 public static final int DB_VERSION = 1;
 private static final String CREATE_TABLE = "CREATE TABLE " + DB_TABLE + " (index INTEGER PRIMARY KEY, golfer_name TEXT, golfer_init TEXT, usga_index DOUBLE);";
 private SQLHelper helper;
 private SQLiteDatabase db;
 private Context context;
 private Golfer lGolfers[];

Golfer tGolfer = new Golfer(cursor.getString(0), cursor.getString(1), cursor.getFloat(2));

ラインは正常に動作します。デバッグ目的で追加しました。次の行は、Source Not Foundエラーを生成します。前の行で使用したばかりなので、クラス Golfer のコンストラクターがあることはわかっています。

これらすべてを呼び出すコードは次のとおりです。

    public class ReadGolfers extends Activity {
    public Golfer Golfers[];
    private GolferDBManager mydManager;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_read_golfers);

        mydManager = new GolferDBManager(this);
        mydManager.openReadable();
        Golfers = mydManager.retrieveGolfers();
        mydManager.retrieveGolfers();
        mydManager.close();
    }
}

これが機能しない理由を理解できる人はいますか?

ありがとう。

後付けとして、次のようにオブジェクト配列が渡されるようにメソッドを変更しました。

    public void retrieveGolfers(Golfer lgolfers[]){
    String[] columns = new String[]{"golfer_name", "golfer_init", "usga_index"};
    Cursor cursor = db.query(true, DB_TABLE, columns, null, null, null, null, null, null, null);
    cursor.moveToFirst();
    int i = 0;
    while (cursor.isAfterLast() == false) {
        lgolfers[i] = new Golfer(cursor.getString(0), cursor.getString(1), cursor.getFloat(2));
        cursor.moveToNext();
    }  
    if (cursor != null && !cursor.isClosed()) {
        cursor.close();
    }
}

まだ喜びはありません。

4

1 に答える 1

0

実際、この行全体が間違っています:

private Golfer lGolfers[];

そのはず:

private Golfer[] lGolfers;

そして、次のように初期化します:

lGolfers = new Golfer[100];

(または、ご希望のサイズ)

ArrayList を使用する方がはるかに優れています。

private ArrayList<Golfer> lGolfers = new ArrayList<Golfer>();
于 2013-11-04T02:47:33.700 に答える