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

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

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

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

Java

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

Q&A

解決済

1回答

2094閲覧

Realm(Java版)を使用したソート処理について。

sakanasann

総合スコア11

Realm

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

Java

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

0グッド

0クリップ

投稿2016/12/08 06:35

ツールバーのオプションメニューから昇順降順のソートをしようとしています。

実行してみると、ランタイムエラーが発生しました。
具体的な症状としては、オプションメニューを選択して実行するとアプリが強制終了します。

なお、それ以外の操作では正常に動作します。

既存のサンプルコードを基としています。

このランタイムエラーを解決したいです。
この質問への回答に他部分のソースコードが必要な場合はご指摘ください。

【オプションメニュー部分のコード】(MainActivity.java内の一部)

Java

1 @Override 2 public boolean onOptionsItemSelected(MenuItem item) { 3 int id = item.getItemId(); 4 5 if (id == R.id.action_settings) { 6 Realm realm = Realm.getInstance(this); 7 RealmResults<Schedule> schedules = realm.where(Schedule.class).findAll(); 8 schedules.sort("date", Sort.ASCENDING); 9 ScheduleAdapter adapter = new ScheduleAdapter(this, schedules, true); 10 mListView.setAdapter(adapter); 11 Toast.makeText(this, "ソート1をしました", Toast.LENGTH_SHORT).show(); 12 return true; 13 }else if(id == R.id.action_settings2){ 14 Realm realm = Realm.getInstance(this); 15 RealmResults<Schedule> schedules = realm.where(Schedule.class).findAll(); 16 schedules.sort("date", Sort.DESCENDING); 17 ScheduleAdapter adapter = new ScheduleAdapter(this, schedules, true); 18 mListView.setAdapter(adapter); 19 Toast.makeText(this, "ソート2をしました", Toast.LENGTH_SHORT).show(); 20 return true; 21 } 22 return super.onOptionsItemSelected(item); 23 }

【MainActivity.java全文】

Java

1import android.app.Activity; 2import android.content.Intent; 3import android.os.Bundle; 4import android.support.design.widget.FloatingActionButton; 5import android.support.design.widget.Snackbar; 6import android.support.v7.app.AppCompatActivity; 7import android.support.v7.widget.Toolbar; 8import android.view.Menu; 9import android.view.MenuItem; 10import android.view.View; 11import android.widget.AdapterView; 12import android.widget.ListView; 13import android.widget.Toast; 14 15import io.realm.Sort; 16import io.realm.Realm; 17import io.realm.RealmResults; 18 19public class MainActivity extends AppCompatActivity { 20 21 ListView mListView; 22 23 @Override 24 protected void onCreate(Bundle savedInstanceState) { 25 super.onCreate(savedInstanceState); 26 setContentView(R.layout.activity_main); 27 Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 28 setSupportActionBar(toolbar); 29 30 mListView = (ListView) findViewById(R.id.listView); 31 32 FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 33 fab.setOnClickListener(new View.OnClickListener() { 34 @Override 35 public void onClick(View view) { 36 Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 37 .setAction("Action", null).show(); 38 } 39 }); 40 Realm realm = Realm.getInstance(this); 41 RealmResults<Schedule> schedules = realm.where(Schedule.class).findAll(); 42 ScheduleAdapter adapter = new ScheduleAdapter(this, schedules, true); 43 mListView.setAdapter(adapter); 44 findViewById(R.id.fab).setOnClickListener(new View.OnClickListener() { 45 @Override 46 public void onClick(View v) { 47 startActivity(new Intent(MainActivity.this, ScheduleEditActivity.class)); 48 } 49 }); 50 mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 51 @Override 52 public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 53 Schedule schedule = (Schedule) parent.getItemAtPosition(position); 54 startActivity(new Intent(MainActivity.this, ScheduleEditActivity.class) 55 .putExtra("schedule_id", schedule.getId())); 56 } 57 }); 58 59 60 } 61 62 63 @Override 64 public boolean onCreateOptionsMenu(Menu menu) { 65 // Inflate the menu; this adds items to the action bar if it is present. 66 getMenuInflater().inflate(R.menu.menu_main, menu); 67 return true; 68 } 69 70 @Override 71 public boolean onOptionsItemSelected(MenuItem item) { 72 int id = item.getItemId(); 73 74 if (id == R.id.action_settings) { 75 Realm realm = Realm.getInstance(this); 76 RealmResults<Schedule> schedules = realm.where(Schedule.class).findAll(); 77 schedules.sort("date", Sort.ASCENDING); 78 ScheduleAdapter adapter = new ScheduleAdapter(this, schedules, true); 79 mListView.setAdapter(adapter); 80 Toast.makeText(this, "ソート1をしました", Toast.LENGTH_SHORT).show(); 81 return true; 82 }else if(id == R.id.action_settings2){ 83 Realm realm = Realm.getInstance(this); 84 RealmResults<Schedule> schedules = realm.where(Schedule.class).findAll(); 85 schedules.sort("date", Sort.DESCENDING); 86 ScheduleAdapter adapter = new ScheduleAdapter(this, schedules, true); 87 mListView.setAdapter(adapter); 88 Toast.makeText(this, "ソート2をしました", Toast.LENGTH_SHORT).show(); 89 return true; 90 } 91 return super.onOptionsItemSelected(item); 92 } 93} 94

【Schedule.javaクラスの中身】

Java

1import java.util.Date; 2 3import io.realm.RealmObject; 4import io.realm.annotations.PrimaryKey; 5 6public class Schedule extends RealmObject{ 7 @PrimaryKey 8 private long id; 9 private Date date; 10 private String title; 11 private String detail; 12 13 public long getId() { 14 return id; 15 } 16 17 public void setId(long id) { 18 this.id = id; 19 } 20 21 public Date getDate() { 22 return date; 23 } 24 25 public void setDate(Date date) { 26 this.date = date; 27 } 28 29 public String getTitle() { 30 return title; 31 } 32 33 public void setTitle(String title) { 34 this.title = title; 35 } 36 37 public String getDetail() { 38 return detail; 39 } 40 41 public void setDetail(String detail) { 42 this.detail = detail; 43 } 44} 45

【ScheduleAdapter.javaクラスの中身】

Java

1import android.content.Context; 2import android.view.View; 3import android.view.ViewGroup; 4import android.widget.TextView; 5 6import java.text.SimpleDateFormat; 7 8import io.realm.RealmBaseAdapter; 9import io.realm.RealmResults; 10 11public class ScheduleAdapter extends RealmBaseAdapter<Schedule> { 12 13 private static class ViewHolder { 14 TextView date; 15 TextView title; 16 } 17 18 public ScheduleAdapter(Context context, RealmResults<Schedule> realmResults, boolean automaticUpdate) { 19 super(context, realmResults, automaticUpdate); 20 } 21 22 @Override 23 public View getView(int position, View convertView, ViewGroup parent) { 24 ViewHolder viewHolder; 25 if(convertView == null) { 26 convertView = inflater.inflate(android.R.layout.simple_list_item_2, parent, false); 27 viewHolder = new ViewHolder(); 28 viewHolder.date = (TextView) convertView.findViewById(android.R.id.text1); 29 viewHolder.title = (TextView)convertView.findViewById(android.R.id.text2); 30 convertView.setTag(viewHolder); 31 } else { 32 viewHolder = (ViewHolder)convertView.getTag(); 33 } 34 35 Schedule schedule = realmResults.get(position); 36 SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); 37 String formatDate = sdf.format(schedule.getDate()); 38 viewHolder.date.setText(formatDate); 39 viewHolder.title.setText(schedule.getTitle()); 40 41 return convertView; 42 } 43} 44

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

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

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

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

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

guest

回答1

0

自己解決

日をまたいで再度実行してみたとこと、問題なく正常に動作しました。

なぜ当日の時点で強制終了したのかは不明ですが、現状で正常に動作しているため、解決とします。

投稿2016/12/09 00:44

sakanasann

総合スコア11

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問