ID非公開さん
2022/1/7 11:09
1回答
AndroidStudioに関して質問です。
AndroidStudioに関して質問です。 Realmを使っていてRealmRsult<E> を使用しています。 RealmRsult<ModelData> realm = realm.where(ModelData.class); で読み込むデータ情報を保持し、 RealmRsult<ModelData> result = query.findAll(); で全てのデータ取得しています。 RealmRsult<ModelData> realm に格納したデータを画面に表示させるためにはどうしたらいいのでしょうか? 試したのは List<ModelData> list = realm.copyFromRealm(result); list.setAdapter((ListAdapter) list); で行いましたがダメでした。 どなたかわかる方いらっしゃいましたら教えて頂きたいです。 よろしくお願い致します。
List<ModelData> list = realm.copyFromRealm(result); ArrayAdapter<ModelData> adapter = new ArrayAdapter<>(MainActivity.this, android.R.layout.simple_list_item_1, list); list.setAdapter(adapter); で画面にリスト自体はデータの数だけ表示出来ましたが、表示されているものが com.websarva.wings.android.realmtrial.ModelData@7d19f7n と、文字列ではなくファイル名?がデータの数だけ出ていました。 (@以降はデータ毎によって異なったものになっています) なぜこのような表示になってしまうのでしょうか?
ベストアンサー
ModelDataクラスにtoStringを実装していないからです。 コンピュータは「ModelDataを表示しろ」と言われても、ModelDataの何を表示していいのかわかりません。 なので、javaのデフォルトでは「クラス名@ハッシュコード」という情報を表示する仕組みになっています。 オブジェクトの表示情報を定義するには toString()をオーバーライドします。 たとえば、 ModelDataクラスのメンバ変数に 名前(name)と年齢(age)があり、 これらを出力したいのなら class ModelData { : : @Override public String toString() { return "名前:" + name + ", 年齢:" + age; } } こうすることで、「名前:太郎, 年齢:5 」 という形で、ModelDataを出力できるようになります。
ID非公開さん
質問者2022/1/7 13:44
回答ありがとうございます。 public class ModelData extends RealmObject{ private String name; private int age; public String getName(){ return this.name; } public void setName(String name){ this.name = name; } public int getAge(){ return this.age; } public void setAge(int age){ this.age = age; } } のような場合はどこにtoString()をつけるべきでしょうか?
質問者からのお礼コメント
ありがとうございました。 最初はtoString()を追加すると捉えず、どこかに付け足すと捉えてしまい迷ってしまいましたが勘違いしていることに気づき、実装をModelDataクラスに追加したら文字列として表示されました! 貴重なお時間を割いて教えて頂きまして、ありがとうございます。
お礼日時:1/7 13:50