Realmを使ってデータベースから取得したのですが、表示のされ方が周りのものと違います。文字列をそのまま取り出せないでしょうか。
同じプログラムで私だけが、どうも数式みたいなのが表示されます。何らかの設定のミスかなと疑っている次第なのですが。
全てのページのプログラムを載せるとなると、多すぎて見づらくなりそうなので、それ以外に必要なページ、プログラム等があれば載せますので教えて欲しいです。要望があり追加しました。
画像のページのプログラムです。
java
1package com.websarva.wings.amdrpod.udemyandroid11_1; 2 3import android.content.res.ColorStateList; 4import android.graphics.Bitmap; 5import android.graphics.Color; 6import android.graphics.drawable.BitmapDrawable; 7import android.os.Bundle; 8import android.support.design.widget.CollapsingToolbarLayout; 9import android.support.design.widget.FloatingActionButton; 10import android.support.design.widget.Snackbar; 11import android.support.v4.widget.NestedScrollView; 12import android.support.v7.app.AppCompatActivity; 13import android.support.v7.graphics.Palette; 14import android.support.v7.widget.Toolbar; 15import android.view.View; 16import android.widget.ImageView; 17import android.widget.TextView; 18 19import java.text.SimpleDateFormat; 20 21import io.realm.Realm; 22 23public class ShowActivity extends AppCompatActivity { 24 private Realm mRealm; 25 private int[] images={R.drawable.image0,R.drawable.image1,R.drawable.image2}; 26 27 @Override 28 protected void onCreate(Bundle savedInstanceState) { 29 super.onCreate(savedInstanceState); 30 setContentView(R.layout.activity_show); 31 Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 32 setSupportActionBar(toolbar); 33 34 FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 35 fab.setOnClickListener(new View.OnClickListener() { 36 @Override 37 public void onClick(View view) { 38 Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 39 .setAction("Action", null).show(); 40 } 41 }); 42 43 mRealm = Realm.getDefaultInstance(); 44 ImageView toolbarImage=(ImageView)findViewById(R.id.toolbarImage); 45 TextView date = (TextView)findViewById(R.id.date); 46 TextView detail = (TextView)findViewById(R.id.detail); 47 CollapsingToolbarLayout layout =(CollapsingToolbarLayout)findViewById(R.id.toolbar_layout); 48 49 //ScroollView呼び出し 50 NestedScrollView scrollView = (NestedScrollView) findViewById(R.id.scrollView); //重大なエラーあり 51 // content_showのスクロールビューと同じにする。同じようなR値が沢山あった為エラーにつながった。 52 53 54 if(getIntent() != null){ 55 long mid = getIntent().getLongExtra("id",-1); 56 Schedule sc = mRealm.where(Schedule.class).equalTo("id",mid).findFirst(); 57 58 SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); 59 String format =sdf.format(sc.date); 60 date.setText(format); 61 layout.setTitle(sc.title); 62 detail.setText(sc.detail); 63 toolbarImage.setImageResource(images[(int)mid %3]); 64 65 66 //Bitmap取得 67 Bitmap bitmap =((BitmapDrawable)toolbarImage.getDrawable()).getBitmap(); 68 Palette palette = Palette.from(bitmap).generate(); 69 70 //パレットから色を取得する 71 int titleColor = palette.getLightVibrantColor(Color.WHITE); 72 int bodyColor = palette.getDarkMutedColor(Color.BLACK); 73 int scrimColor = palette.getMutedColor(Color.DKGRAY); 74 int iconColor =palette.getVibrantColor(Color.LTGRAY); 75 76 layout.setExpandedTitleColor(titleColor); //eee 77 layout.setContentScrimColor(scrimColor); //画像背景 78 scrollView.setBackgroundColor(bodyColor); //本文背景 79 detail.setTextColor(titleColor); //本文文字 80 fab.setBackgroundTintList(ColorStateList.valueOf(iconColor)); //Floatingbuttonのtintカラー 81}} 82@Override 83protected void onDestroy() { 84super.onDestroy(); 85mRealm.close(); 86} 87} 88
ListViewが表示されるMainのプログラム
java
1package com.websarva.wings.amdrpod.udemyandroid11_1; 2 3import android.content.Intent; 4import android.os.Bundle; 5import android.support.design.widget.FloatingActionButton; 6import android.support.design.widget.Snackbar; 7import android.support.v7.app.AppCompatActivity; 8import android.view.View; 9import android.widget.AdapterView; 10import android.widget.Button; 11import android.widget.ListView; 12 13import java.util.Date; 14 15import io.realm.Realm; 16import io.realm.RealmResults; 17 18public class MainActivity extends AppCompatActivity { 19 private Realm mrealm; 20 private ListView list; 21 22 @Override 23 protected void onCreate(Bundle savedInstanceState) { 24 super.onCreate(savedInstanceState); 25 setContentView(R.layout.activity_main); 26 27 mrealm = Realm.getDefaultInstance(); 28 list = (ListView) findViewById(R.id.list); 29 RealmResults<Schedule> schedules = mrealm.where(Schedule.class).findAll(); 30 ScheduleAdapter adapter = new ScheduleAdapter(schedules); 31 32 list.setAdapter(adapter); 33 34 Button dbTest = (Button) findViewById(R.id.dbtestbutton); 35 dbTest.setOnClickListener(new View.OnClickListener() { 36 @Override 37 public void onClick(View v) { 38 Intent intent = new Intent(MainActivity.this, RealmTestActivity.class); 39 startActivity(intent); 40 } 41 }); 42 FloatingActionButton add = (FloatingActionButton) findViewById(R.id.add); 43 add.setOnClickListener(new View.OnClickListener() { 44 //app:srcComatにエラーがついているが問題なく動くためスルー 45 @Override 46 public void onClick(View v) { 47 final long[] newId = new long[1]; 48 mrealm.executeTransaction(new Realm.Transaction() { 49 @Override 50 public void execute(Realm realm) { 51 Number num = realm.where(Schedule.class).max("id"); 52 newId[0] = 0; 53 if (num != null) { 54 newId[0] = num.longValue() + 1; 55 } 56 Schedule sc = realm.createObject(Schedule.class, newId[0]); 57 sc.date = new Date(); 58 sc.title = ""; 59 sc.detail = ""; 60 } 61 }); 62 Intent i = new Intent(MainActivity.this, inputActivity.class); 63 i.putExtra("id", newId[0]); 64 startActivity(i); 65 } 66 }); 67 list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 68 @Override 69 public void onItemClick(AdapterView<?> parent, View view, int position, long l) { 70 ScheduleAdapter adapter = (ScheduleAdapter) list.getAdapter(); 71 Schedule sc = adapter.getItem(position); 72 Intent i = new Intent(MainActivity.this, ShowActivity.class); 73 i.putExtra("id", sc.id); 74 //でかいミス発生!そしててこずった!putExtraのnameはgetExtraと揃えること。大文字小文字まできっちりと。 75 startActivity(i); 76 } 77 }); 78 list.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 79 @Override 80 public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { 81 ScheduleAdapter adapter = (ScheduleAdapter) list.getAdapter(); 82 final Schedule sc = adapter.getItem(position);//データベースからposition取得。select文の代わりになる 83 mrealm.executeTransaction(new Realm.Transaction() { 84 @Override 85 public void execute(Realm realm) { 86 sc.deleteFromRealm(); 87 } 88 }); 89Snackbar.make(view,"削除しました",Snackbar.LENGTH_LONG) 90.setAction("OK", new View.OnClickListener() { //スナックバーはアクションを追加できる 91@Override 92public void onClick(View v) { 93Snackbar.make(v,"OKが押された時の処理",Snackbar.LENGTH_SHORT).show(); 94}}) 95.show(); 96return true; 97}});} 98 99@Override 100protected void onDestroy() { 101super.onDestroy(); 102mrealm.close();}} 103
オブジェクトDBらしいので、クエリで直にオブジェクトが返ってるのではないかと…。
こんなコードだけでは入れ方も分からないし、ドキュメントを読んでください。
長過ぎるとか気にする必要はないです。勝手に読み飛ばします。
了解しました
adapterのプログラム
package com.websarva.wings.amdrpod.udemyandroid11_1;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import java.text.SimpleDateFormat;
import io.realm.OrderedRealmCollection;
import io.realm.RealmBaseAdapter;
public class ScheduleAdapter extends RealmBaseAdapter<Schedule> {
private int[] image ={R.drawable.image0,R.drawable.image1,R.drawable.image2};
public ScheduleAdapter(@Nullable OrderedRealmCollection<Schedule> data) {
super(data);
}
private static class ViewHolder {
ImageView card;
TextView date;
TextView title;
TextView detail;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
convertView = LayoutInflater.from(parent.getContext()).//①Toast作成
inflate(R.layout.custom_cell, parent, false);//どんなToastか指定
viewHolder = new ViewHolder();//View作成
viewHolder.card =(ImageView)convertView.findViewById(R.id.cardImage);
viewHolder.date = (TextView) convertView.findViewById(R.id.date);//View一個目
viewHolder.title = (TextView) convertView.findViewById(R.id.detail);//View2個目
viewHolder.detail =(TextView) convertView.findViewById(R.id.detail);
convertView.setTag(viewHolder);//作ったViewを①に代入
} else {
viewHolder = (ViewHolder) convertView.getTag(); //二つ目以降
}
Schedule sc = adapterData.get(position); //取り出したデータベース順に位置を決めていく
SimpleDateFormat sim = new SimpleDateFormat("yyyy/MM/dd");
String format = sim.format(sc.date);
viewHolder.date.setText(format);
viewHolder.title.setText(sc.title);
viewHolder.card.setImageResource(image[(int)sc.id % 3]);
viewHolder.detail.setText(sc.detail);
return convertView;
}
}
データベースを取得したりクリエイトする画面を作っています
package com.websarva.wings.amdrpod.udemyandroid11_1;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
import android.widget.TextView;
import java.text.SimpleDateFormat;
import io.realm.Realm;
public class inputActivity extends AppCompatActivity {
private Realm mr;
private long mId;
private TextView mDate;
private EditText mTitle;
private EditText mDetail;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_input);
mr = Realm.getDefaultInstance();
mDate = (TextView) findViewById(R.id.day);
mTitle = (EditText) findViewById(R.id.title);
mDetail = (EditText) findViewById(R.id.detail);
if (getIntent() != null) {
mId = getIntent().getLongExtra("id", -1);
Schedule sc = mr.where(Schedule.class).equalTo("id", mId).findFirst();
SimpleDateFormat sim = new SimpleDateFormat("yyyy/MM/dd");
String format = sim.format(sc.date);
mDate.setText(format);
mTitle.setText(sc.title);
mDetail.setText(sc.detail);
}
mTitle.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(final Editable s) {
mr.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
Schedule sc = realm.where(Schedule.class).equalTo("id", mId).findFirst();
sc.title = s.toString();
}
});
}
});
mDetail.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
mr.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
Schedule sc = mr.where(Schedule.class).equalTo("id", mId).findFirst();
sc.detail = sc.toString();
}
});
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
mr.close();
}
}
データベースです
package com.websarva.wings.amdrpod.udemyandroid11_1;
import java.util.Date;
import io.realm.RealmObject;
import io.realm.annotations.PrimaryKey;
public class Schedule extends RealmObject {
@PrimaryKey
public long id;
public Date date;
public String title;
public String detail;
}
字数制限があるみたくここに追記しました。かかわりのあるプログラムはこのぐらいかなと思います
こちらはシンタックスハイライトもなく、インデントもできないので、質問領域に追加してください。
別にgithubやそれに似た場所に入れておいて、そこへのリンクでも構いません。
ただ、私が最初に書いたコメント内容では何が足りなかったのでしょうか?
今現在の疑問点を明快にしてください。
回答1件
あなたの回答
tips
プレビュー
