Realmを使ってデータベースから取得したのですが、表示のされ方が周りのものと違います。文字列をそのまま取り出せないでしょうか。
同じプログラムで私だけが、どうも数式みたいなのが表示されます。何らかの設定のミスかなと疑っている次第なのですが。
全てのページのプログラムを載せるとなると、多すぎて見づらくなりそうなので、それ以外に必要なページ、プログラム等があれば載せますので教えて欲しいです。要望があり追加しました。
画像のページのプログラムです。
package com.websarva.wings.amdrpod.udemyandroid11_1;
import android.content.res.ColorStateList;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.support.design.widget.CollapsingToolbarLayout;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v4.widget.NestedScrollView;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.graphics.Palette;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import java.text.SimpleDateFormat;
import io.realm.Realm;
public class ShowActivity extends AppCompatActivity {
private Realm mRealm;
private int[] images={R.drawable.image0,R.drawable.image1,R.drawable.image2};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_show);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
mRealm = Realm.getDefaultInstance();
ImageView toolbarImage=(ImageView)findViewById(R.id.toolbarImage);
TextView date = (TextView)findViewById(R.id.date);
TextView detail = (TextView)findViewById(R.id.detail);
CollapsingToolbarLayout layout =(CollapsingToolbarLayout)findViewById(R.id.toolbar_layout);
//ScroollView呼び出し
NestedScrollView scrollView = (NestedScrollView) findViewById(R.id.scrollView); //重大なエラーあり
// content_showのスクロールビューと同じにする。同じようなR値が沢山あった為エラーにつながった。
if(getIntent() != null){
long mid = getIntent().getLongExtra("id",-1);
Schedule sc = mRealm.where(Schedule.class).equalTo("id",mid).findFirst();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
String format =sdf.format(sc.date);
date.setText(format);
layout.setTitle(sc.title);
detail.setText(sc.detail);
toolbarImage.setImageResource(images[(int)mid %3]);
//Bitmap取得
Bitmap bitmap =((BitmapDrawable)toolbarImage.getDrawable()).getBitmap();
Palette palette = Palette.from(bitmap).generate();
//パレットから色を取得する
int titleColor = palette.getLightVibrantColor(Color.WHITE);
int bodyColor = palette.getDarkMutedColor(Color.BLACK);
int scrimColor = palette.getMutedColor(Color.DKGRAY);
int iconColor =palette.getVibrantColor(Color.LTGRAY);
layout.setExpandedTitleColor(titleColor); //eee
layout.setContentScrimColor(scrimColor); //画像背景
scrollView.setBackgroundColor(bodyColor); //本文背景
detail.setTextColor(titleColor); //本文文字
fab.setBackgroundTintList(ColorStateList.valueOf(iconColor)); //Floatingbuttonのtintカラー
}}
@Override
protected void onDestroy() {
super.onDestroy();
mRealm.close();
}
}
ListViewが表示されるMainのプログラム
package com.websarva.wings.amdrpod.udemyandroid11_1;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
import java.util.Date;
import io.realm.Realm;
import io.realm.RealmResults;
public class MainActivity extends AppCompatActivity {
private Realm mrealm;
private ListView list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mrealm = Realm.getDefaultInstance();
list = (ListView) findViewById(R.id.list);
RealmResults<Schedule> schedules = mrealm.where(Schedule.class).findAll();
ScheduleAdapter adapter = new ScheduleAdapter(schedules);
list.setAdapter(adapter);
Button dbTest = (Button) findViewById(R.id.dbtestbutton);
dbTest.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, RealmTestActivity.class);
startActivity(intent);
}
});
FloatingActionButton add = (FloatingActionButton) findViewById(R.id.add);
add.setOnClickListener(new View.OnClickListener() {
//app:srcComatにエラーがついているが問題なく動くためスルー
@Override
public void onClick(View v) {
final long[] newId = new long[1];
mrealm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
Number num = realm.where(Schedule.class).max("id");
newId[0] = 0;
if (num != null) {
newId[0] = num.longValue() + 1;
}
Schedule sc = realm.createObject(Schedule.class, newId[0]);
sc.date = new Date();
sc.title = "";
sc.detail = "";
}
});
Intent i = new Intent(MainActivity.this, inputActivity.class);
i.putExtra("id", newId[0]);
startActivity(i);
}
});
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long l) {
ScheduleAdapter adapter = (ScheduleAdapter) list.getAdapter();
Schedule sc = adapter.getItem(position);
Intent i = new Intent(MainActivity.this, ShowActivity.class);
i.putExtra("id", sc.id);
//でかいミス発生!そしててこずった!putExtraのnameはgetExtraと揃えること。大文字小文字まできっちりと。
startActivity(i);
}
});
list.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
ScheduleAdapter adapter = (ScheduleAdapter) list.getAdapter();
final Schedule sc = adapter.getItem(position);//データベースからposition取得。select文の代わりになる
mrealm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
sc.deleteFromRealm();
}
});
Snackbar.make(view,"削除しました",Snackbar.LENGTH_LONG)
.setAction("OK", new View.OnClickListener() { //スナックバーはアクションを追加できる
@Override
public void onClick(View v) {
Snackbar.make(v,"OKが押された時の処理",Snackbar.LENGTH_SHORT).show();
}})
.show();
return true;
}});}
@Override
protected void onDestroy() {
super.onDestroy();
mrealm.close();}}
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
check解決した方法
0
データベースに入力する際(inputActivity)、afterTextChanged(Editable s)で、書かれた文字をデータベースに登録するようにしていました。そこでEditableの変数sと違う変数を使っていたためのエラーでした。
メソッドは、バージョンによって、デフォルトで生成されてる変数名が変わってくるのですね。おかげで、原本と照らし合わせても気づきませんでした。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.37%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
wwbQzhMkhhgEmhU
2019/02/02 05:57
オブジェクトDBらしいので、クエリで直にオブジェクトが返ってるのではないかと…。
こんなコードだけでは入れ方も分からないし、ドキュメントを読んでください。
長過ぎるとか気にする必要はないです。勝手に読み飛ばします。
maikel
2019/02/03 03:03
了解しました
maikel
2019/02/03 03:04
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;
}
}
maikel
2019/02/03 03:05
データベースを取得したりクリエイトする画面を作っています
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();
}
}
maikel
2019/02/03 03:06
データベースです
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;
}
maikel
2019/02/03 03:07
字数制限があるみたくここに追記しました。かかわりのあるプログラムはこのぐらいかなと思います
wwbQzhMkhhgEmhU
2019/02/03 09:12
こちらはシンタックスハイライトもなく、インデントもできないので、質問領域に追加してください。
別にgithubやそれに似た場所に入れておいて、そこへのリンクでも構いません。
ただ、私が最初に書いたコメント内容では何が足りなかったのでしょうか?
今現在の疑問点を明快にしてください。