1

多くの列を持つムービーテーブルと、同じ列/フィールドタイプのテーブルを同じ順序で表すクラスがあります(idの1つのintと他のすべては文字列です)このコードは、のレコードを挿入しようとしますオブジェクトからmovieデータベースへのムービー。メソッドputがそのグループを取得できない、または引数(String, capture#2-of ?)が問題を解決するためにそれよりも良いまたは少し悪いものがあるという問題が発生しますか?
EDIT:なぜ私が間違っているのか説明してもらえますか?

ContentValues contentValues = new ContentValues();
Field[] fields = movie.getClass().getFields();
for(int i = 0; i < fields.length; i++)
{
    contentValues.put(allColumns[i], fields[i].getType().cast(fields[i].get(movie)));
}
4

2 に答える 2

2

fields[i].getType().cast(fields[i].get(movie))Object型を返し、Objectを2番目の引数として取るput(...)のオーバーロードはありません。

コンテンツ値のadd(...)メソッドを使用する場合は、最初に値をint、String、boolean、long、byte[]などのプリミティブ型に変換する必要があります。

データをblob(バイトの配列として)またはStringなどの他の表現にシリアル化できます。

編集:コメントを参照してください。Field.getType()は、cast()を呼び出す前にキャストする必要があるジェネリッククラスを返すようです。

Class<String> fieldType = (Class<String>) fields[i].getType();

しかし、これはあなたが前もってタイプを知る必要があるのであなたがさらに進むのを助けません、あなたがすることができることは代わりにこのようなものです:

ContentValues contentValues = new ContentValues();
Field[] fields = movie.getClass().getFields();
for(int i = 0; i < fields.length; i++)
{
        Class<?> fieldType = fields[i].getType();

        if(String.class.isAssignableFrom(fieldType)) {
            contentValues.put(allColumns[i], (String) fields[i].get(movie));
        } else if(Integer.class.isAssignableFrom(fieldType)) {
            contentValues.put(allColumns[i], (Integer) fields[i].get(movie));
        }
        ...and so on for all types
}
于 2013-02-13T12:23:27.533 に答える
0

ORMLiteのようなものを使用して、データベースクエリを管理できます。Androidで使用するためのドキュメントを次に示します

于 2013-02-13T11:07:55.553 に答える