質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

1202閲覧

Simple Cursor AdapterでImageViewを表示させる方法

ankomike

総合スコア1

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2020/04/26 08:06

編集2020/04/26 08:11

前提・実現したいこと

AndroidStudio3.5.3使用。言語はjava。
魚図鑑の様なアプリを開発しようとしています。

発生している問題・エラーメッセージ

DB(SQL)にある魚の情報を、SimpleCursorAdapterを使用する事でListViewで表示しようと試みました。
その結果、名前の部分は表示されるのですが、画像部分が表示されません。
スクショ画像
(アジの左に本来表示されるべき画像が表示されていません。)

デバッグ中に以下のメッセージがログに表示されています。
解決策はありますでしょうか?

E/BitmapFactory: Unable to decode stream: java.io.FileNotFoundException: R.drawable.fish_hirame (No such file or directory)

該当のソースコード

ZukanOpenHelper

java

1package2 3import4 5public class ZukanOpenHelper extends SQLiteOpenHelper { 6 7 public static final String DB_NAME="getFish.db"; 8 public static final int DB_VERSION= 11; 9 10 public static final String CREATE_TABLE= 11 "create table "+ ZukanContract.Zukan.TABLE_NAME+" (" 12 +"_id integer primary key autoincrement, " 13 +ZukanContract.Zukan.COL_NAME+" text, "+ZukanContract.Zukan.COL_IMAGE+" integer, " 14 +ZukanContract.Zukan.COL_DESCRIPTION+" text, "+ZukanContract.Zukan.COL_LOC+" text, "+ ZukanContract.Zukan.COL_CAUGHT+" integer)"; 15 public static final String INIT_TABLE= 16 "insert into "+ ZukanContract.Zukan.TABLE_NAME+" (name,image, description, loc, caught) values "+"('アジ','R.drawable.fish_aji','説明文','海','0')"; 17 public static final String DROP_TABLE= 18 "drop table if exists " + ZukanContract.Zukan.TABLE_NAME; 19 20 21 public ZukanOpenHelper(Context c){ 22 super(c,DB_NAME,null,DB_VERSION); 23 } 24 25 @Override 26 public void onCreate(SQLiteDatabase db) { 27 db.execSQL(CREATE_TABLE); 28 db.execSQL(INIT_TABLE); 29 } 30 31 @Override 32 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 33 db.execSQL(DROP_TABLE); 34 onCreate(db); 35 } 36 } 37

MainActivity

java

1package2 3import4 5public class MainActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<Cursor> { 6 7 private SimpleCursorAdapter adapter; 8 public final static String EXTRA_NAME = "com.school.zukanApp"; 9 10 @Override 11 protected void onCreate(Bundle savedInstanceState) { 12 super.onCreate(savedInstanceState); 13 setContentView(R.layout.activity_main); 14 15 String[] from = {ZukanContract.Zukan.COL_NAME, ZukanContract.Zukan.COL_LOC, ZukanContract.Zukan.COL_IMAGE}; 16 int[] to = {R.id.name, R.id.loc, R.id.icon}; 17 18 adapter = new SimpleCursorAdapter(this, R.layout.list_item, null, from, to); 19 ListView myListView = (ListView) findViewById(R.id.myListView); 20 myListView.setAdapter(adapter); 21 22 getSupportLoaderManager().initLoader(0, null, this); 23 } 24 25 @NonNull 26 @Override 27 //起動と同時に loader起動 28 public Loader<Cursor> onCreateLoader(int id, @Nullable Bundle args) { 29 String[] projection = { 30 ZukanContract.Zukan._ID, 31 ZukanContract.Zukan.COL_NAME, 32 ZukanContract.Zukan.COL_LOC, 33 ZukanContract.Zukan.COL_IMAGE}; 34 35 return new CursorLoader( 36 this, ZukanContentProvider.CONTENT_URI, projection, null, null, ZukanContract.Zukan._ID + " DESC"); 37 } 38 39 @Override 40 public void onLoadFinished(@NonNull Loader<Cursor> loader, Cursor data) { 41 adapter.swapCursor(data); 42 } 43 44 @Override 45 public void onLoaderReset(@NonNull Loader<Cursor> loader) { 46 adapter.swapCursor(null); 47 } 48} 49

list_item

xml

1<?xml version="1.0" encoding="utf-8"?> 2<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto" 4 android:padding = "16dp" 5 android:orientation="horizontal" 6 android:layout_width="match_parent" 7 android:layout_height="wrap_content"> 8 9 <ImageView 10 android:id="@+id/icon" 11 android:layout_width="0dp" 12 android:layout_height="match_parent" 13 android:layout_weight="1" 14 android:layout_marginRight="16dp" 15 android:src="@mipmap/ic_launcher_round" /> 16 17 <LinearLayout 18 android:layout_width="0dp" 19 android:layout_height="wrap_content" 20 android:layout_weight="5" 21 android:orientation="vertical"> 22 23 <TextView 24 android:id="@+id/name" 25 android:textSize="24sp" 26 android:layout_width="match_parent" 27 android:layout_height="wrap_content"/> 28 <TextView 29 android:id="@+id/loc" 30 android:textSize="16sp" 31 android:textColor="#999999" 32 android:layout_width="match_parent" 33 android:layout_height="wrap_content"/> 34 35 </LinearLayout> 36</LinearLayout>

補足情報

Java初心者であり、ドットインストールの「Androidでメモアプリを作ろう」を参考に作成しました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2020/04/26 11:04

その「Androidでメモアプリを作ろう」という記事では, ご提示のコードのように画像を扱っているのでしょうか.
ankomike

2020/04/26 13:07

返答ありがとうございます。 メモアプリでは画像を取り扱っておらず、自分の知識だけで見よう見まねで追加を行いました。 SimpleCursorAdapterを見たところ、ImageViewも対応してそうであったので、試してみましたが動きませんでした。
guest

回答1

0

ベストアンサー

SimpleCursorAdapter は, to に指定した id が ImageView の場合は

java

1 public void setViewImage(ImageView v, String value) { 2 try { 3 v.setImageResource(Integer.parseInt(value)); 4 } catch (NumberFormatException nfe) { 5 v.setImageURI(Uri.parse(value)); 6 } 7 }

を実行しています.
ですので, データベースの該当カラムには リソース id (=数字) を入れなければなりませんが, 現状では「コード用のリソースの名前」を入れています.
ZukanOpenHelper の

"('アジ','R.drawable.fish_aji','説明文','海','0')"

と言う部分を

"('アジ','"+R.drawable.fish_aji+"','説明文','海','0')"

としてみては如何でしょうか.

投稿2020/04/26 15:25

jimbe

総合スコア13209

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ankomike

2020/04/26 15:59

回答内容を修正したところ無事解決することが出来ました。 また説明が分かりやすく、理論的な部分も理解する事が出来ました。 迅速な返答誠にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問