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

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

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

RealmとはSQLiteやCore Dataに代わるモバイルデータベースです。iOSとAndroidの両方でサポートされています。

Java

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

Android

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

Android Studio

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

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

解決済

1回答

2823閲覧

AndroidStudioでRealmのデータをlistViewに表示できない

telin

総合スコア18

Realm

RealmとはSQLiteやCore Dataに代わるモバイルデータベースです。iOSとAndroidの両方でサポートされています。

Java

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

Android

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

Android Studio

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

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2018/11/09 00:58

AndroidStudio、Realm、kotlin初心者です。
AndroidStudioでレシピブックのアプリを作ろうと思い、Javaの経験が多少あったのでkotlinで開発を試みています。
Realmを使ってテーブルを作成しその中身をlistViewに表示させたいのですが、空白のまま表示されません。
AndroidStudio初心者でどんな仕組みで動いているのかイマイチよくわかっていないので探りながら開発している状態ですが行き詰まっています。
詳しい方ご教授願います。

MainActivity

kotlin

1import android.os.Bundle 2import android.support.v7.app.AppCompatActivity 3import android.widget.ListView 4import io.realm.Realm 5import io.realm.kotlin.createObject 6import io.realm.kotlin.where 7 8import java.util.* 9 10class MainActivity : AppCompatActivity() { 11 private lateinit var realm: Realm 12 13 override fun onCreate(savedInstanceState: Bundle?) { 14 realm = Realm.getDefaultInstance() 15 realm.beginTransaction() 16 realm.createObject<Recipe>().apply { 17 recipeId = UUID.randomUUID().toString() 18 recipeName = "curry" 19 } 20 realm.commitTransaction() 21 var listView: ListView? = null 22 super.onCreate(savedInstanceState) 23 setContentView(R.layout.activity_main) 24 25 val Recipe = realm.where<Recipe>().findAll() 26 listView?.adapter = RecipeAdapter(Recipe) 27 } 28 29 override fun onDestroy() { 30 super.onDestroy() 31 realm.close() 32 } 33} 34

Recipe

kotlin

1import io.realm.RealmObject 2import io.realm.annotations.PrimaryKey 3 4open class Recipe : RealmObject() { 5 @PrimaryKey 6 var recipeId: String? = null 7 var recipeName: String? = null 8 var recipeCategory: String? = null 9 var recipeHowtomake: String? = null 10 var recipeInfo: String? = null 11 var recipeNinmae: Int = 0 12 var recipePrice: Int = 0 13 var recipeMaterial: String? = null 14 15 } 16

RecipeAdapter

kotlin

1import android.view.LayoutInflater 2import android.view.View 3import android.view.ViewGroup 4import android.widget.TextView 5import io.realm.OrderedRealmCollection 6import io.realm.RealmBaseAdapter 7 8class RecipeAdapter (data: OrderedRealmCollection<Recipe>?) 9 : RealmBaseAdapter<Recipe>(data) { 10 inner class ViewHolder(cell : View) { 11 var recipeId = cell.findViewById<TextView>(android.R.id.text1) 12 var recipeName = cell.findViewById<TextView>(android.R.id.text2) 13 } 14 15 override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View { 16 val view : View 17 val viewHolder : ViewHolder 18 19 when(convertView) { 20 null -> { 21 val inflater = LayoutInflater.from(parent?.context) 22 view = inflater.inflate(android.R.layout.simple_expandable_list_item_2,parent,false) 23 viewHolder = ViewHolder(view) 24 view.tag = viewHolder 25 } 26 else -> { 27 view = convertView 28 viewHolder = view.tag as ViewHolder 29 } 30 } 31 adapterData?.run { 32 val Recipe = get(position) 33 viewHolder.recipeId.text = Recipe.recipeId 34 viewHolder.recipeName.text = Recipe.recipeName 35 } 36 return view 37 } 38}

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

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

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

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

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

guest

回答1

0

ベストアンサー

Realmうんぬんは関係なくて、listViewを生成していないのが原因ですね。

kotlin

1var listView: ListView? = null

まずはそこを直してみてください。

Kotlinのnullableは慣れれば便利なのですが、適当に使うと今回のように気づきにくいバグを生むだけなので、なるべく ? をつけずに実装して必要が出たらnullableにしていくのがよいと思います。

投稿2018/11/09 01:56

kakajika

総合スコア3131

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

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

telin

2018/11/09 02:04

回答ありがとうございます。 var listView: ListView? = null はMainActivityのほうに書きましたが場所が間違っているということでしょうか?
kakajika

2018/11/09 02:11

いえ、nullのままでは実体がありませんからadapterをセットしようとしても何も起こりませんよ、ということです。findViewByIdでレイアウト内のListViewを取得するなりして、実体をlistViewに代入してあげてください。
telin

2018/11/09 02:39

なんとか解決できました! ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問