2017-05-04 4 views
-2

私はSQliteデータベースに描画可能なID(R.drawable.imageなど)を格納し、後でそのIDを取得してlistViewに入れたいとします。私はBLOBとして画像を保存したくないのですが、私はIDを保存したいだけです。SQliteデータベースのドロウアブルからIDを取得して再度取得する方法は?

今私はドロウアブルのIDを格納し、このような表を作成します。

db.execSQL("CREATE TABLE cards \n" + 
      "(\n" + 
      "card_id INT PRIMARY KEY, \n" + 
      "cpr VARCHAR(11) NOT NULL,\n" + 
      "card_type VARCHAR(30), \n" + 
      "front_photo VARCHAR(30), back_photo BLOB,\n" + 
      "FOREIGN KEY (cpr) REFERENCES users(cpr)\n" + 
      ")\n" + 
      ";\n"); 

    db.execSQL("INSERT INTO cards (card_id , cpr, card_type, front_photo) VALUES(1, '170492-1802','Rejsekort', 'R.drawable.rejsekort_f');" 
    ); 
    db.execSQL("INSERT INTO cards (card_id , cpr, card_type, front_photo) VALUES(2, '170492-1802','Bank Card', 'R.drawable.bankcard_f');" 
    ); 
    db.execSQL("INSERT INTO cards (card_id , cpr, card_type, front_photo) VALUES(3, '170492-1802','Drivers Licence', 'R.drawable.bankcard_f');" 
    ); 
    db.execSQL("INSERT INTO cards (card_id , cpr, card_type, front_photo) VALUES(4, '170492-1802','Sundhedskort', 'R.drawable.bankcard_f');" 
    ); 
    db.execSQL("INSERT INTO cards (card_id , cpr, card_type, front_photo) VALUES(5, '170492-1802','Ungdomskort', 'R.drawable.bankcard_f');" 
    ); 

その後、私は私が表示できるように、そのテーブルのすべてのIDを取得し、整数のArrayListに追加しようこれらはListViewで次のようになります:

ArrayList<Integer> images=new ArrayList<Integer>(); 
public void addImagesToListview() { 
    DBHelper dbHelper = new DBHelper(MainActivity.this); 
    db = dbHelper.getReadableDatabase(); 
    Cursor getImages = db.rawQuery("Select front_photo from cards", null); 
    getImages.moveToFirst(); 
    while(!getImages.isAfterLast()) { 
     String image = getImages.getString(0); 
     int image2 = Integer.parseInt(image); 
     images.add(image2); 
     getImages.moveToNext(); } 

しかし、何らかの理由でアプリケーションがクラッシュしますか?私はこのように私のArrayListにドロワブルのIDを追加することができるよ:

images.add(R.drawable.image);

私は、データベースにそのIDを格納したときに、なぜそれが動作しません、それは次のようになりますので、それを再度取得します:

front_photo INT 

、あなたの行を挿入する

images.add("ID from database");

+0

'...何らかの理由でアプリケーションがクラッシュしました...'いくつかの理由で、あなたはlogcatを投稿しませんでした。 –

+1

あなたのフィールド型は文字列で、int、 'front_photo VARCHAR(30)'が必要です。また、評価の代わりに生のString 'R.drawable.bankcard_f'をデータベースに挿入してIDを挿入します。あなたは 'R.drawable.bankcard_f'!=整数 –

答えて

0

変更するには、データベース、inse評価されたIDであり、それを表す文字列ではありません。

int photoID = R.drawable.rejsekort_f; 
db.execSQL("INSERT INTO cards (card_id , cpr, card_type, front_photo) VALUES(1, '170492-1802','Rejsekort', " + photoID + ");"; 
+0

ありがとうございますのでアプリがクラッシュしています!それは私の問題を解決:) – Sumsar9000

関連する問題