データを使う前に、
cursor.moveToFirst();などの対応はしたのですが、このようなエラーが出ます
どうすればいいでしょうか?アドバイスをいただけないでしょうか?
java
1com.example.android.sample.memo E/AndroidRuntime: FATAL EXCEPTION: main 2 android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0 3 at android.database.AbstractCursor.checkPosition(AbstractCursor.java:418) 4 at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136) 5 at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50) 6 at com.example.android.sample.memo.EditActivity.onOptionsItemSelected(EditActivity.java:139) 7 at android.app.Activity.onMenuItemSelected(Activity.java:2534) 8 at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:408) 9 at android.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:195) 10 11
java
1 2 3public class EditActivity extends AppCompatActivity { 4 // 保存ファイル名 5 String mFileName = ""; 6 // 保存なしフラグ 7 boolean mNotSave = false; 8 9 @Override 10 protected void onCreate(Bundle savedInstanceState) { 11 super.onCreate(savedInstanceState); 12 setContentView(R.layout.activity_edit); 13 14 //open helper 15 //open db memoDBHelperに変更 16 MemoDBHelper memoDBHelper = new MemoDBHelper(this); 17 SQLiteDatabase db = memoDBHelper.getWritableDatabase(); 18 //日時の下だから上のは、いらん 19 20 // タイトルと内容入力用の EditText を取得 21 EditText eTxtTitle = (EditText) findViewById(R.id.eTxtTitle); 22 EditText eTxtContent = (EditText) findViewById(R.id.eTxtContent); 23 //実行日の取得 24 EditText eTxtData = (EditText) findViewById(R.id.eTxtData); 25 26 27 // メイン画面からの情報受け取り、EditTextに設定 28 // (情報がない場合(新規作成の場合)は、設定しない) 29 30 Intent intent = getIntent(); 31 String name = intent.getStringExtra("NAME"); 32 if (name != null) { 33 mFileName = name; 34 eTxtTitle.setText(intent.getStringExtra("TITLE")); 35 eTxtContent.setText(intent.getStringExtra("CONTENT")); 36 eTxtData.setText(intent.getStringExtra("DATA")); 37 38 } else { 39 //・・・・・・今日の日時を登録する 40 Calendar calendar = Calendar.getInstance(); 41 int month = calendar.get(Calendar.MONTH) + 1; 42 int day = calendar.get(Calendar.DATE); 43 eTxtData.setText(month + "月" + day + "日"); 44 } 45 } 46 47 48 @Override 49 protected void onPause() { 50 51 super.onPause(); 52 53 54 // [削除] で画面を閉じるときは、保存しない 55 if (mNotSave) { 56 return; 57 } 58 59 60 } 61 62 63 // メニュー生成 64 @Override 65 public boolean onCreateOptionsMenu(Menu menu) { 66 getMenuInflater().inflate(R.menu.edit, menu); 67 return true; 68 } 69 70 // メニュー選択時の処理 71 @Override 72 public boolean onOptionsItemSelected(MenuItem item) { 73 74 //open helper 75 //open db memoDBHelperに変更 76 MemoDBHelper memoDBHelper = new MemoDBHelper(this); 77 SQLiteDatabase db = memoDBHelper.getWritableDatabase(); 78 79 80 //ここのidにcancelとupdateを入れる 81 switch (item.getItemId()) { 82 83 case R.id.action_can: 84 //キャンセルが押された場合 85 mNotSave = true; 86 this.finish(); 87 break; 88 89 case R.id.action_upd: 90 91 92 Cursor c = null; 93 c = db.query( 94 UserContract.Users.TABLE_NAME, 95 null,//fields 96 null,//where 97 null,//where arg ここでは、多分何もせずに、全件取得して、リストに入れる 98 null,//groupBy 99 null,//having 100 null,//order by 101 null 102 ); 103 c.moveToFirst(); 104 105 //この下にエラー 106 //データベースから取得の比較用 107 108 String title2 = c.getString(c.getColumnIndex(UserContract.Users.COL_TITLE)); 109 String content2 = c.getString(c.getColumnIndex(UserContract.Users.COL_CONTENT)); 110 String data2 = c.getString(c.getColumnIndex(UserContract.Users.COL_DATA)); 111 112 // c.close(); よくわからん 113//close db 114 db.close(); 115 116 //updateが押された場合 117 //deleteFileのトコを保存に変更する 118 //他のトコから見てくる 119 120 // タイトル、内容、実行日の追加 121 EditText eTxtTitle = (EditText) findViewById(R.id.eTxtTitle); 122 EditText eTxtContent = (EditText) findViewById(R.id.eTxtContent); 123 EditText eTxtData = (EditText) findViewById(R.id.eTxtData); 124 String title = eTxtTitle.getText().toString(); 125 String content = eTxtContent.getText().toString(); 126 String data = eTxtData.getText().toString(); 127 128 129 //if文で、たいとるがからの時は、保存しない 130 // タイトル、内容が空白の場合、保存しない 131 if (title.isEmpty() || content.isEmpty()) { 132 Toast.makeText(this, R.string.msg_destruction, Toast.LENGTH_SHORT).show(); 133 } else if (title2 == title && content2 == content && data2 == data) { 134 ///////どっといんすとーる 135 ContentValues newTitle = new ContentValues(); 136 //ここでtitleとしてそれは、実行押す前なら存在するのか? 137 //上のことまじ??????????? 138 newTitle.put(UserContract.Users.COL_TITLE, title); 139 int updateCount = db.update( 140 UserContract.Users.TABLE_NAME, 141 newTitle, 142 UserContract.Users.COL_TITLE + "= ?", 143 //この下の行をgetしてくるように変える(getしなくてもtitleでいいかも?) 144 new String[]{title} 145 ); 146 147 try { 148 ContentValues newContent = new ContentValues(); 149 newContent.put(UserContract.Users.COL_CONTENT, content); 150 int updateCount1 = db.update( 151 UserContract.Users.TABLE_NAME, 152 newContent, 153 UserContract.Users.COL_TITLE + "= ?", 154 new String[]{title} 155 ); 156 157 ContentValues newData = new ContentValues(); 158 newData.put(UserContract.Users.COL_DATA, data); 159 int updateCount2 = db.update( 160 UserContract.Users.TABLE_NAME, 161 newData, 162 UserContract.Users.COL_TITLE + "= ?", 163 new String[]{title} 164 ); 165 166 //close db 167 db.close(); 168 //保存に成功しました。 169 Toast.makeText(this, R.string.msg_upd, Toast.LENGTH_SHORT).show(); 170 } catch (Exception e) { 171 Toast.makeText(this, "強制returnしました。", Toast.LENGTH_LONG).show(); 172 } 173 //updateCount1とか2とかは、エラーのやつでしょ? 174 } else { 175 176 //insert をEditの中でやる 177 // データをtextから取得して表示するコード 178 179 try { 180 //この下のinsertには、updateのように、textから取得したデータをinsertする 181 182 ContentValues newUser = new ContentValues(); 183 newUser.put(UserContract.Users.COL_TITLE, eTxtTitle.toString()); 184 newUser.put(UserContract.Users.COL_CONTENT, eTxtContent.toString()); 185 newUser.put(UserContract.Users.COL_DATA, eTxtData.toString()); 186 long newId = db.insert(UserContract.Users.TABLE_NAME, 187 null, 188 newUser 189 ); 190 //close db 191 db.close(); 192 //保存に成功しました。 193 194 //・・・・・・・・・・もしかしたら、これとその上は、Adapter.set()なんとかをしてないから、更新されないかも 195 196 197 Toast.makeText(this, R.string.msg_upd, Toast.LENGTH_SHORT).show(); 198 db.close(); 199 } catch (Exception e) { 200 Toast.makeText(this, "強制returnしました。", Toast.LENGTH_LONG).show(); 201 } 202 203 } 204 205 } 206 return super.onOptionsItemSelected(item); 207 } 208}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/04/07 12:46
2017/04/07 13:10
2017/04/07 13:30
2017/04/07 14:14
2017/04/07 14:52
2017/04/07 15:10
2017/04/07 15:15
2017/04/07 15:20
2017/04/07 15:21
2017/04/07 15:22
2017/04/07 15:31
2017/04/07 15:38
2017/04/07 15:54
2017/04/07 16:03