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

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

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

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

Android

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

Kotlin

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

Q&A

解決済

1回答

1089閲覧

Realmでデータ読み込み

退会済みユーザー

退会済みユーザー

総合スコア0

Realm

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

Android

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

Kotlin

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

0グッド

0クリップ

投稿2021/12/06 02:22

編集2021/12/06 02:23

前提・実現したいこと

Realmにデータを保存して、そこからデータを読み込みたいのですが、読み込んだ際のデータが[user = proxy[{name}:おくえ}]になります。(Toastで表示した際にこのように表示されます。)
[おくえ]のような感じにデータを読み込みたいのですが、どうすればよいでしょうか?

該当のソースコード

MainActivity

1class MainActivity : AppCompatActivity() { 2 3 lateinit var realm : Realm 4 5 override fun onCreate(savedInstanceState: Bundle?) { 6 super.onCreate(savedInstanceState) 7 setContentView(R.layout.activity_main) 8 9 realm = Realm.getDefaultInstance() 10 11 val fabt_add : FloatingActionButton = findViewById(R.id.fabt_add) 12 val fabt_delete : FloatingActionButton = findViewById(R.id.fabt_delete) 13 val lv : ListView = findViewById(R.id.lv) 14 15 val adapter = ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, mutableListOf()) 16 lv.adapter = adapter 17 18 //データの登録 19 fabt_add.setOnClickListener { 20 val name = EditText(this) 21 AlertDialog.Builder(this) 22 .setTitle("名前の追加") 23 .setMessage("名前を追加して下さい") 24 .setView(name) 25 .setPositiveButton("追加",DialogInterface.OnClickListener { _, _ -> 26 realm.beginTransaction() 27 val dbname = realm.createObject(user::class.java) 28 dbname.name = name.text.toString() 29 realm.commitTransaction() 30 adapter.add(name.text.toString()) 31 Toast.makeText(applicationContext,"登録しました",Toast.LENGTH_SHORT).show() 32 }) 33 .setNegativeButton("キャンセル",DialogInterface.OnClickListener { _, _ -> 34 Toast.makeText(applicationContext,"キャンセルしました",Toast.LENGTH_SHORT).show() 35 }).show() 36 } 37 38 //タップした行のデータを更新 39 lv.setOnItemClickListener { _, _, position, id -> 40 val ab = adapter.getItem(id.toInt()) 41 realm.beginTransaction() 42 val a = realm.where(user::class.java).equalTo("name",ab).findAll() 43 realm.commitTransaction() 44 Toast.makeText(applicationContext,"${a}",Toast.LENGTH_SHORT).show() 45 } 46 47 //タップした行のデータを削除 48 lv.setOnItemLongClickListener { _, _, _, id -> 49 AlertDialog.Builder(this) 50 .setTitle("項目の削除") 51 .setMessage("項目を削除しますか?") 52 .setPositiveButton("削除",DialogInterface.OnClickListener { _, _ -> 53 val name_delete_lv = adapter.getItem(id.toInt()) 54 realm.beginTransaction() 55 val name_delete = realm.where(user::class.java).equalTo("name",name_delete_lv).findAll() 56 name_delete.deleteFirstFromRealm() 57 realm.commitTransaction() 58 adapter.remove(adapter.getItem(id.toInt())) 59 Toast.makeText(applicationContext,"削除しました",Toast.LENGTH_SHORT).show() 60 }) 61 .setNegativeButton("キャンセル",DialogInterface.OnClickListener { _, _ -> 62 Toast.makeText(applicationContext,"キャンセルしました",Toast.LENGTH_SHORT).show() 63 }).show() 64 true 65 } 66 67 68 //データの全削除 69 fabt_delete.setOnClickListener { 70 AlertDialog.Builder(this) 71 .setTitle("データの全削除") 72 .setMessage("データを削除しますか?") 73 .setPositiveButton("yes",DialogInterface.OnClickListener { _, _ -> 74 realm.beginTransaction() 75 val name_all_delete = realm.where(user::class.java).findAll() 76 name_all_delete.deleteAllFromRealm() 77 realm.commitTransaction() 78 adapter.remove(adapter.clear().toString()) 79 Toast.makeText(applicationContext,"削除しました", Toast.LENGTH_SHORT).show() 80 }) 81 .setNegativeButton("no",DialogInterface.OnClickListener { _, _ -> 82 Toast.makeText(applicationContext,"キャンセルしました",Toast.LENGTH_SHORT).show() 83 }).show() 84 } 85 } 86}

user

1package com.example.listview_app 2 3import io.realm.RealmObject 4 5open class user : RealmObject(){ 6 var name : String = "" 7}

補足情報(FW/ツールのバージョンなど)

Android Stuido Arctic Fox | 2020.3.1 Patch 1

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

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

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

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

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

jimbe

2021/12/08 16:30

その表示というのはどの行のことでしょうか。
退会済みユーザー

退会済みユーザー

2021/12/08 23:38

jimbe様 いつもコメント有難うございます。 情報が不足しており申し訳ありません。 コメントで//タップした行のデータの更新のところです。 val a = realm.where(user::class.java).equalTo("name",ab).findAll()で変数aをトーストで表示すると [user = proxy[{name}:おくえ}]のように表示されてしまいます。 私としては、[おくえ]だけのデータを取得したいと考えております。 その他のuser=proxy等の文字が入っていると、realmからデータを取得して、そのデータとListViewから取得したデータを比較した時に、比較が出来ない(今回は[おくえ]というデータを保存しております)状況です。 分かりずらい説明でしたら申し訳ありません。
guest

回答1

0

ベストアンサー

Realm がどのようなモノかのご理解が足りないようです。
Realm はオブジェクトとして情報を保存する形式です。
ですので、user オブジェクトを保存したら、取り出せるのも user オブジェクトです。

findAll は RealmResults<E> オブジェクトを返すメソッドで、今回
"E" は "user" ですので a は RealmResults<user> 型であり、 String 型ではありません。
従いまして、 findAll で取得したオブジェクトをそのまま表示や比較に使用するということは意味が有りません。
要素である user オブジェクトを取り出し、さらにその user オブジェクトから name フィールド値を取り出して扱う必要があるでしょう。

なお、オブジェクトの表示に関しましては、「表示の見た目は実際の中身では無い」ということもご理解されていないと、今後ご苦労されると思います。
Int や String は、表示すると中身がそのまま表示されますので、全てのオブジェクトがそうだと思ってしまうかもしれませんが、そうではありません。
全てのオブジェクトは toString():String メソッドを持ち、オブジェクトを文字列化する際にはそれが呼ばれます。 toString() を明示的に定義していない場合は、 Object クラスの実装が用いられます。
user クラスは継承可能("open")であり RealmObject を継承しているため、Realm によってどこかで toString をオーバーライドされているかもしれませんが、何にしても、 (文字列化しての)表示が例えば「name="ABC"」だからといって name フィールドに "name="ABC"" と入っているわけでは無く、toString() メソッドによってそのようにフォーマットされている…とご理解ください。

投稿2021/12/09 03:10

編集2021/12/09 03:22
jimbe

総合スコア13209

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

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

退会済みユーザー

退会済みユーザー

2021/12/09 04:12 編集

jimbe様 いつも回答有難うございます。 Realmに対して理解出来ておりませんでした。 説明有難うございます。 まだまだ勉強が足りないので、勉強致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問