書籍のサンプルソースを改造しようとしています。
書籍のサンプルソースでは削除ボタンを押すとそのまま削除されてしまい、誤操作の危険性があるためタイトルのような処理を追加したいと思い、別のサンプルを改良したものを作成しそれと組み合わせようと考えました。
しかし、どう組み合わせれば正常に動くかわからずいろいろと試してみたのですが一向に正常に動きません。
もちろん、それぞれ単独では正常に動作します。
本来ならば時間をかけて勉強しエラーの対処にあたりたいのですが、諸事情によりあまり時間をとれなくなってしまったため、質問することとしました。
おそらくは、かなり初歩的なミスも多いのかと思われますがよろしくお願いします。
開発環境はAndroidStudioです。
Java言語での開発、Androidstudioの利用、Realmの利用は今回が初めてです。
エラー文の意味はおおざっぱには理解できたのですが、それをどうすれば解決できるのかがわかりません。
なお、teratailの利用も今回が初めてですので、その点についても気になるところがありましたらご指摘くださるとありがたいです。
↓書籍の削除処理部分のソースコード
ScheduleEditActivityクラス内に記述されています
Java
1public void onDeleteTapped(View view) { 2 long scheduleId = getIntent().getLongExtra("schedule_id", -1); 3 if (scheduleId != -1) { 4 Realm realm = Realm.getInstance(this); 5 RealmResults<Schedule> results = realm.where(Schedule.class) 6 .equalTo("id", scheduleId).findAll(); 7 realm.beginTransaction(); 8 results.remove(0); 9 realm.commitTransaction(); 10 Toast.makeText(this, "削除しました", Toast.LENGTH_SHORT).show(); 11 } 12 finish(); 13 }
↓サンプルソースをもとに改良したソースコード
YESボタンを押すと”削除しました”と表示
NOボタンを押すと”キャンセルしました”と表示
この時点では上下のソースのものとは別のプロジェクトです。
MainActivityクラス内に記述しています
Java
1protected void onCreate(Bundle savedInstanceState) { 2 super.onCreate(savedInstanceState); 3 AlertDialog.Builder alert = new AlertDialog.Builder(this); 4 alert.setMessage("本当に削除しますか?"); 5 alert.setPositiveButton("No", new DialogInterface.OnClickListener(){ 6 public void onClick(DialogInterface dialog, int which) { 7 //Noボタンが押された時の処理 8 Toast.makeText(MainActivity.this, "キャンセルしました", Toast.LENGTH_LONG).show(); 9 }}); 10 alert.setNegativeButton("Yes", new DialogInterface.OnClickListener(){ 11 public void onClick(DialogInterface dialog, int which) { 12 //Yesボタンが押された時の処理 13 Toast.makeText(MainActivity.this, "削除しました", Toast.LENGTH_LONG).show(); 14 }}); 15 alert.show(); 16 }
この2つを組み合わせて、削除時に”本当に削除しますか?”と聞き、YESを押せば削除する。NOを押せばキャンセルするようにしたいです。
↓自分で試してみた結果、エラーが出ました。
先ほどの「書籍の削除処理部分のソースコード」に「サンプルソースをもとに改良したソースコード 」を書き加える形になっています
ScheduleEditActivityクラス内に記述しています
Java
1public void onDeleteTapped(View view) { 2 super.onCreate(savedInstanceState); 3 AlertDialog.Builder alert = new AlertDialog.Builder(this); 4 alert.setMessage("本当に削除しますか?"); 5 alert.setPositiveButton("No", new DialogInterface.OnClickListener(){ 6 public void onClick(DialogInterface dialog, int which) { 7 //Noボタンが押された時の処理 8 Toast.makeText(MainActivity.this, "キャンセルしました", Toast.LENGTH_LONG).show(); 9 }}); 10 alert.setNegativeButton("Yes", new DialogInterface.OnClickListener(){ 11 public void onClick(DialogInterface dialog, int which) { 12 //Yesボタンが押された時の処理 13 long scheduleId = getIntent().getLongExtra("schedule_id", -1); 14 if (scheduleId != -1) { 15 Realm realm = Realm.getInstance(this); 16 RealmResults<Schedule> results = realm.where(Schedule.class) 17 .equalTo("id", scheduleId).findAll(); 18 realm.beginTransaction(); 19 results.remove(0); 20 realm.commitTransaction(); 21 Toast.makeText(this, "削除しました", Toast.LENGTH_SHORT).show(); 22 } 23 }}); 24 alert.show(); 25 finish(); 26 }
エラー文は以下の通りです。
Error:(99, 24) エラー: シンボルを見つけられません
シンボル: 変数 savedInstanceState
場所: クラス ScheduleEditActivity
Error:(105, 44) エラー: MainActivityは内部クラスを囲みません
Error:(112, 40) エラー: getInstanceに適切なメソッドが見つかりません(<anonymous OnClickListener>)
メソッド Realm.getInstance(Context)は使用できません
(引数の不一致: <anonymous OnClickListener>をContextに変換できません:)
メソッド Realm.getInstance(RealmConfiguration)は使用できません
(引数の不一致: <anonymous OnClickListener>をRealmConfigurationに変換できません:)
どうすればよいでしょうか?
-----追記-----
↓指摘部分と、その他一部を修正しました。
変更部分:
・「super.onCreate(savedInstanceState);」を削除
・「this」を「getBaseContext()」に変更
・「Toast.makeText(MainActivity.this, "キャンセルしました", Toast.LENGTH_LONG).show();」を
「Toast.makeText(getBaseContext(), "キャンセルしました", Toast.LENGTH_LONG).show();」に変更
Java
1public void onDeleteTapped(View view) { 2 AlertDialog.Builder alert = new AlertDialog.Builder(this); 3 alert.setMessage("本当に削除しますか?"); 4 alert.setPositiveButton("No", new DialogInterface.OnClickListener(){ 5 public void onClick(DialogInterface dialog, int which) { 6 //Noボタンが押された時の処理 7 Toast.makeText(getBaseContext(), "キャンセルしました", Toast.LENGTH_LONG).show(); 8 }}); 9 alert.setNegativeButton("Yes", new DialogInterface.OnClickListener(){ 10 public void onClick(DialogInterface dialog, int which) { 11 //Yesボタンが押された時の処理 12 long scheduleId = getIntent().getLongExtra("schedule_id", -1); 13 if (scheduleId != -1) { 14 Realm realm = Realm.getInstance(getBaseContext()); 15 RealmResults<Schedule> results = realm.where(Schedule.class) 16 .equalTo("id", scheduleId).findAll(); 17 realm.beginTransaction(); 18 results.remove(0); 19 realm.commitTransaction(); 20 Toast.makeText(getBaseContext(), "削除しました", Toast.LENGTH_SHORT).show(); 21 } 22 }}); 23 alert.show(); 24 finish(); 25 }
エラーはでなくなったものの、AlertDialog画面が表示後すぐに閉じてしまうようになりました。
削除処理はされておらず、トーストも表示されていません。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/09/30 01:28
2016/09/30 01:43
2016/10/01 08:45