teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

9

コードの追加

2017/04/19 14:27

投稿

edoooooo
edoooooo

スコア478

title CHANGED
@@ -1,1 +1,1 @@
1
- todoリストで一つのListが繰り返し表示されます。mLst.clearの位置が問題ですか?
1
+ todoリストでSQLで、アップデートするとリスト全て、同じ項目の繰り返しになります。
body CHANGED
@@ -3,8 +3,6 @@
3
3
  新規登録でlistを追加した場合も、編集でリストをupdateした場合も、
4
4
  Listが一つのList(同じ情報のもの)のみの繰り返しとなります。
5
5
 
6
- mList.clearがコードの中にあるのですが、表示されるListは、全部同じもので、コード編集ボタンをおし、updateしようとすると、updateされます。
7
- 一方、mList.clearしないと、表示されるListは、何種類かのListが表示されますが、コード編集ボタンを押しupdateしようとしても、updateは、されません。
8
6
 
9
7
  この下のコードは、メモをデータベース(SQLite)から取得し、mapに値を入れて、それを、ListViewで表示しているコードです。
10
8
 

8

説明の追加

2017/04/19 14:27

投稿

edoooooo
edoooooo

スコア478

title CHANGED
@@ -1,1 +1,1 @@
1
- Androidでtodoリストに追加すると、全てリスト追加た物にかわってしいます。
1
+ todoリストで一つList繰り返表示されます。mLst.clearの位置が問題ですか?
body CHANGED
@@ -1,7 +1,11 @@
1
1
  AndroidでTodoリストを作ったのですが、
2
+ todoリストで一つのListが繰り返し表示されます
2
- 新規登録で、リストに追加すると全てのメモの一覧が、
3
+ 新規登録でlistを追加した場合も編集でリストをupdateした場合も
3
- その、新しく追加した物へと代わり、一つのtodoリストが何個表示されるいうことにってしいます。
4
+ Listが一つのList(同じ情報のの)のみの繰り返しとなます。
4
5
 
6
+ mList.clearがコードの中にあるのですが、表示されるListは、全部同じもので、コード編集ボタンをおし、updateしようとすると、updateされます。
7
+ 一方、mList.clearしないと、表示されるListは、何種類かのListが表示されますが、コード編集ボタンを押しupdateしようとしても、updateは、されません。
8
+
5
9
  この下のコードは、メモをデータベース(SQLite)から取得し、mapに値を入れて、それを、ListViewで表示しているコードです。
6
10
 
7
11
  //MainActivity
@@ -13,7 +17,7 @@
13
17
 
14
18
  // ListView に設定するデーた
15
19
  List<Map<String, String>> mList = null;
16
- /////////////////////////////////////////////////////ここに宣言されているmList偶然じゃないな
20
+ /////////////////////////////////////////////////////ここに宣言されているmListが原因?
17
21
 
18
22
  //新しく追加ListView
19
23
  ListView list=null;
@@ -55,7 +59,7 @@
55
59
  list.setAdapter(mAdapter);
56
60
 
57
61
 
58
- ///////////////////////////////////////////////この上でリストを表示してんじゃん、データベースにデータがあるから、表示がミスってんじゃん
62
+ ///////////////////////////////////////////////この上でリストを表示して、データベースにデータがあるから、表示がまちがえ
59
63
 
60
64
 
61
65
  // ListView のアイテム選択イベント
@@ -65,10 +69,8 @@
65
69
  public void onItemClick(AdapterView<?> parent, View view, int pos, long id) {
66
70
 
67
71
 
68
-
69
72
  // 編集画面に渡すデータをセットし、表示
70
- //この下は、ファイルとは関係ないonResume()からやる
71
- Intent intent = new Intent(MainActivity.this, EditActivity.class);
73
+ Intent intent = new Intent(MainActivity.this, EditActivity.class);
72
74
 
73
75
  // //これは編集だから から文字にする
74
76
  intent.putExtra("INSERT","");
@@ -96,11 +98,9 @@
96
98
 
97
99
 
98
100
  if(c.moveToFirst()) {
99
- //こんな感じで使ってるってことはあれも間違えて大丈夫だと思う?
100
101
  String idd = c.getString(c.getColumnIndex(UserContract.Users._ID));
101
102
 
102
- System.out.println("iddの表示やーーーーーーーーーーーーーーーー:"+idd);
103
- //表示できてる
103
+ //表示できてる
104
104
 
105
105
  c.close();
106
106
  intent.putExtra("ID", idd);
@@ -133,16 +133,7 @@
133
133
  mList.clear();
134
134
  /////////////////////////////////////////////////////////このclearがいけないのか?
135
135
 
136
- /**
136
+
137
- for (int i=0; i<files.length; i++) {
138
- String fileName = files[i].getName();
139
- if (files[i].isFile() && fileName.endsWith(".txt")) {
140
-
141
- データベースのデータを全取得してそれをリストに入れるのにこのようなfor分は、必要ではないのか?
142
- 多分whileでやってるから大丈夫
143
- **/
144
-
145
- /////////////////// //String 二変更
146
137
  String id=null;
147
138
  String title = null;
148
139
  String content = null;
@@ -153,8 +144,7 @@
153
144
  String sql="SELECT * FROM " +table2 ;
154
145
 
155
146
 
156
- //もうわから無いから、selectをそれぞれ分けて、それぞれをputしていく
147
+
157
- /////////////////・・・・・・・・・・・・・・・ダメだったら上のようにする
158
148
 
159
149
  //下のnullは条件の?の奴
160
150
  Cursor c =db.rawQuery(sql,null);
@@ -181,7 +171,7 @@
181
171
  map.put("data",data);
182
172
  mList.add(map);
183
173
 
184
- //////////////////////////リストの表示が悪いんじゃん?それかこの上のコード map.putのやつ
174
+ //////////////////////////リストの表示が悪い?それかこの上のコード map.putのやつ
185
175
 
186
176
  }
187
177
 
@@ -196,5 +186,4 @@
196
186
 
197
187
 
198
188
 
199
-
200
189
  ```

7

コードを新しいものにしました。

2017/04/19 14:11

投稿

edoooooo
edoooooo

スコア478

title CHANGED
File without changes
body CHANGED
@@ -7,7 +7,23 @@
7
7
  //MainActivity
8
8
  ```java
9
9
  public class MainActivity extends AppCompatActivity {
10
+ // ListView 用アダプタ
11
+ SimpleAdapter mAdapter = null;
10
12
 
13
+
14
+ // ListView に設定するデーた
15
+ List<Map<String, String>> mList = null;
16
+ /////////////////////////////////////////////////////ここに宣言されているmList偶然じゃないな
17
+
18
+ //新しく追加ListView
19
+ ListView list=null;
20
+
21
+ //質問する前につ以下
22
+ SQLiteDatabase db=null;
23
+
24
+
25
+
26
+
11
27
  @Override
12
28
  protected void onCreate(Bundle savedInstanceState) {
13
29
  super.onCreate(savedInstanceState);
@@ -18,27 +34,42 @@
18
34
  db=memoDBHelper.getWritableDatabase();
19
35
 
20
36
 
37
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////ここCREATE_TABLE
38
+ //db.execSQL(CREATE_TABLE);
39
+
40
+
41
+
21
42
  ListView list = (ListView) findViewById(R.id.listView);
22
43
  mList = new ArrayList<Map<String, String>>();
23
44
 
24
45
 
25
46
  mAdapter = new SimpleAdapter(this,
26
47
  mList,
48
+ //独自で定義したlayoutを適応する
27
- android.R.layout.simple_list_item_2,
49
+ android.R.layout.simple_list_item_2,
28
50
  new String[]{"title", "content", "data"}, //Map側のkey
29
- new int[]{android.R.id.text1, android.R.id.text2, R.id.eTxtData}
51
+ new int[]{android.R.id.text1, android.R.id.text2, R.id.eTxtData} //layout側のTextViewId 表示させたいMapのkey順に合わせる
30
52
  );
31
53
 
54
+ // ListView にアダプターをセット
32
55
  list.setAdapter(mAdapter);
33
56
 
57
+
58
+ ///////////////////////////////////////////////この上でリストを表示してんじゃん、データベースにデータがあるから、表示がミスってんじゃん?
59
+
60
+
61
+ // ListView のアイテム選択イベント
34
62
  list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
35
63
 
36
64
  @Override
37
65
  public void onItemClick(AdapterView<?> parent, View view, int pos, long id) {
38
66
 
39
67
 
40
- Intent intent = new Intent(MainActivity.this, EditActivity.class);
41
68
 
69
+ // 編集画面に渡すデータをセットし、表示
70
+ //この下は、ファイルとは関係ないonResume()からやる
71
+ Intent intent = new Intent(MainActivity.this, EditActivity.class);
72
+
42
73
  // //これは編集だから から文字にする
43
74
  intent.putExtra("INSERT","");
44
75
 
@@ -47,26 +78,33 @@
47
78
  intent.putExtra("DATA", mList.get(pos).get("data"));
48
79
 
49
80
 
50
- Cursor c;
81
+ String title1= mList.get(pos).get("title");
51
- c=db.query(
82
+ String content1=mList.get(pos).get("content");
83
+ String data1=mList.get(pos).get("data");
52
- UserContract.Users.TABLE_NAME,
84
+ String data2=data1.toString();
53
- null,//fields
54
- null,//where
55
- null,//where arg ここでは、多分何もせずに、全件取得して、リストに入れる
56
- null,//groupBy
57
- null,//having
58
- null,//order by
59
- null
60
- );
61
85
 
62
- if(c.moveToFirst()) {
63
- Integer idd = c.getInt(UserContract.Users._ID);
86
+ String table2=UserContract.Users.TABLE_NAME;
87
+ //////////////////なぜかCOL_TITLEとかでなくTITLEで取得できる????????????
64
88
 
65
- c.close();
89
+ String sql="SELECT * FROM " +table2 +
90
+ " WHERE TITLE = " +"'"+title1 +"'" +
91
+ " AND CONTENT ="+ "'"+content1 +"'"+
92
+ " AND DATA =" +"'"+data2 +"'";
66
93
 
67
- //ここにデータベースからしゅとくした値をいれる
94
+ //下のnullは条件の?の奴
95
+ Cursor c =db.rawQuery(sql,null);
68
96
 
97
+
98
+ if(c.moveToFirst()) {
99
+ //こんな感じで使ってるってことはあれも間違えて大丈夫だと思う?
100
+ String idd = c.getString(c.getColumnIndex(UserContract.Users._ID));
101
+
102
+ System.out.println("iddの表示やーーーーーーーーーーーーーーーー:"+idd);
103
+ //表示できてる
104
+
105
+ c.close();
69
106
  intent.putExtra("ID", idd);
107
+ //ここで IDにせっとし intentを飛ばしてる
70
108
  }
71
109
 
72
110
  startActivity(intent);
@@ -91,194 +129,72 @@
91
129
  SQLiteDatabase db=memoDBHelper.getWritableDatabase();
92
130
 
93
131
 
94
-
95
132
  // ListView 用アダプタのデータをクリア
96
133
  mList.clear();
134
+ /////////////////////////////////////////////////////////このclearがいけないのか?
97
135
 
136
+ /**
137
+ for (int i=0; i<files.length; i++) {
138
+ String fileName = files[i].getName();
139
+ if (files[i].isFile() && fileName.endsWith(".txt")) {
140
+
141
+ データベースのデータを全取得してそれをリストに入れるのにこのようなfor分は、必要ではないのか?
142
+ 多分whileでやってるから大丈夫
143
+ **/
144
+
145
+ /////////////////// //String 二変更
98
- String id=null;
146
+ String id=null;
99
147
  String title = null;
100
148
  String content = null;
101
149
  String data=null;
102
150
 
103
- //ここからコピペ
104
151
 
105
- //これはselect
106
- Cursor c;
107
- c=db.query(
108
- UserContract.Users.TABLE_NAME,
152
+ String table2=UserContract.Users.TABLE_NAME;
109
- null,//fields
110
- null,//where
111
- null,//where arg ここでは、多分何もせずに、全件取得して、リストに入れる
153
+ String sql="SELECT * FROM " +table2 ;
112
- null,//groupBy
113
- null,//having
114
- null,//order by
115
- null
116
- );
117
154
 
155
+
156
+ //もうわから無いから、selectをそれぞれ分けて、それぞれをputしていく
157
+ /////////////////・・・・・・・・・・・・・・・ダメだったら上のようにする
158
+
159
+ //下のnullは条件の?の奴
160
+ Cursor c =db.rawQuery(sql,null);
161
+
162
+ Log.v("DB_TEST","Count:"+c.getCount());
163
+
118
164
  Map<String, String> map = new HashMap<String, String>();
119
165
  while(c.moveToNext()){
166
+
120
-
167
+ //この下のこんな書き方にする必要ある?
168
+ //だからupdateされ無いんじゃん?わからん
121
169
  title=c.getString(c.getColumnIndex(UserContract.Users.COL_TITLE));
122
- content=c.getString(c.getColumnIndex(UserContract.Users.COL_CONTENT));
170
+ content=c.getString(c.getColumnIndex(UserContract.Users.COL_CONTENT));
123
171
  data=c.getString(c.getColumnIndex(UserContract.Users.COL_DATA));
124
-
125
172
 
173
+
174
+ //このLog.vはデータベースからselectした情報をc.moveToNext()してる奴だから有効
175
+ //つまりデータベースにはしっかり入力できてるってこと
176
+ Log.v("DB_TESTここはMainActivity"," id: "+id+ "title: "+title+ " content: "+content+ " data: "+data);
177
+ //////////////////////////このログを見るといろいろ取得できてるなのに表示は同じもの
178
+
126
179
  map.put("title", title);
127
180
  map.put("content", content);
128
181
  map.put("data",data);
129
182
  mList.add(map);
130
183
 
184
+ //////////////////////////リストの表示が悪いんじゃん?それかこの上のコード map.putのやつ
131
185
 
132
186
  }
133
187
 
134
-
188
+ //ここで、addされたmListをlistViewに表示することをやるためにonCreateのん作業をメソッドで呼ぶ必要?
189
+
135
190
  c.close();
136
-
137
191
  db.close();
138
192
 
193
+ // ListView のデータ変更を表示に反映
139
194
  mAdapter.notifyDataSetChanged();
140
195
  }
141
196
 
142
- }
143
197
 
144
- ```
145
- //EditActivity
146
198
 
147
- ```
148
199
 
149
- public class EditActivity extends AppCompatActivity {
150
-
151
-
152
- // メニュー選択時の処理
153
- @Override
154
- public boolean onOptionsItemSelected(MenuItem item) {
155
-
156
- //open helper
157
- //open db memoDBHelperに変更
158
- MemoDBHelper memoDBHelper = new MemoDBHelper(this);
159
- SQLiteDatabase db = memoDBHelper.getWritableDatabase();
160
-
161
-
162
- Cursor c = null;
163
- String title = null;
164
- String content = null;
165
- String data = null;
166
- EditText eTxtTitle = null;
167
- EditText eTxtContent = null;
168
- EditText eTxtData = null;
169
-
170
- //ここのidにcancelとupdateを入れる
171
- switch (item.getItemId()) {
172
- case R.id.action_can:
173
- //キャンセルが押された場合
174
- mNotSave = true;
175
- this.finish();
176
- break;
177
-
178
- case R.id.action_upd:
179
-
180
- // タイトル、内容、実行日の追加
181
- eTxtTitle = (EditText) findViewById(R.id.eTxtTitle);
182
- eTxtContent = (EditText) findViewById(R.id.eTxtContent);
183
- eTxtData = (EditText) findViewById(R.id.eTxtData);
184
- title = eTxtTitle.getText().toString();
185
- content = eTxtContent.getText().toString();
186
- data = eTxtData.getText().toString();
187
-
188
- Intent intent = getIntent();
189
- //あえてinsertkに変更
190
- String insertk = intent.getStringExtra("INSERT");
191
-
192
- Integer idd=intent.getIntExtra("ID",0);
193
- //第二引きううには、初期値を入れるみたい
194
-
195
- if (title.isEmpty() || content.isEmpty()) {
196
- Toast.makeText(this, R.string.msg_destruction, Toast.LENGTH_SHORT).show();
197
-
198
- }
199
-
200
- if (insertk.length() == 0) {
201
-
202
- //ここにinsertkの長さを表す
203
- Log.v("ああああああああああ","time:"+"+ insertk.length()+ ");
204
- //updateの時は、ああああああと出るが、
205
- //アップデートされていない
206
- try {
207
-
208
- ContentValues newData = new ContentValues();
209
- newData.put(UserContract.Users.COL_DATA, data);
210
- int updateCount = db.update(
211
-
212
- UserContract.Users.TABLE_NAME,
213
- newData,
214
- Long.toString(UserContract.Users._ID) +"=" + Long.toString(idd),
215
- null
216
- );
217
-
218
-
219
- ContentValues newContent = new ContentValues();
220
- newContent.put(UserContract.Users.COL_CONTENT, content);
221
- int updateCount1 = db.update(
222
-
223
-
224
- UserContract.Users.TABLE_NAME,
225
- newData,
226
- Long.toString(UserContract.Users._ID) +"=" + Long.toString(idd),
227
- null
228
- );
229
-
230
- ContentValues newTitle = new ContentValues();
231
- newTitle.put(UserContract.Users.COL_TITLE, title);
232
- int updateCount2 = db.update(
233
-
234
-
235
- UserContract.Users.TABLE_NAME,
236
- newData,
237
- Long.toString(UserContract.Users._ID) +"=" + Long.toString(idd),
238
- null
239
- );
240
-
241
- //保存に成功しました。
242
- Toast.makeText(this, R.string.msg_upd, Toast.LENGTH_SHORT).show();
243
- } catch (Exception e) {
244
- Toast.makeText(this, "強制returnしました。", Toast.LENGTH_LONG).show();
245
- }
246
- } else {
247
-
248
- Log.v("いいいいいいいいいい","time:"+"+ insertk.length()+ ");
249
-
250
- //insertするといいいいと表示されるが、
251
- //リストは、同じ物となる
252
- //つまりセレクトがおかしいのではないか?
253
-
254
- //これは insert
255
- // データをtextから取得して表示するコード
256
-
257
- try {
258
- //この下のinsertには、updateのように、textから取得したデータをinsertする
259
-
260
- ContentValues newUser = new ContentValues();
261
- newUser.put(UserContract.Users.COL_TITLE,title);
262
- newUser.put(UserContract.Users.COL_CONTENT,content);
263
- newUser.put(UserContract.Users.COL_DATA, data);
264
- long newId = db.insert(UserContract.Users.TABLE_NAME,
265
- null,
266
- newUser
267
- );
268
- //close db
269
-
270
- Toast.makeText(this, R.string.msg_upd, Toast.LENGTH_SHORT).show();
271
- } catch (Exception e) {
272
- Toast.makeText(this, "強制returnしました。", Toast.LENGTH_LONG).show();
273
- }
274
-
275
- }
276
-
277
-
278
- db.close();
279
- }
280
- return super.onOptionsItemSelected(item);
281
-
282
- }
283
- }
284
200
  ```

6

コードの更新

2017/04/19 14:00

投稿

edoooooo
edoooooo

スコア478

title CHANGED
File without changes
body CHANGED
@@ -4,57 +4,71 @@
4
4
 
5
5
  この下のコードは、メモをデータベース(SQLite)から取得し、mapに値を入れて、それを、ListViewで表示しているコードです。
6
6
 
7
- どこが先ほどのミスの原因となっているのでしょうか?
7
+ //MainActivity
8
- アドバイスをいただけないでしょうか?
9
- どうぞよろしくお願いします。
10
8
  ```java
9
+ public class MainActivity extends AppCompatActivity {
11
10
 
12
- public class MainActivity extends AppCompatActivity {
13
- // ListView 用アダプタ
14
- SimpleAdapter mAdapter = null;
15
- // ListView に設定するデーた
16
- List<Map<String, String>> mList = null;
17
- //新しく追加ListView
18
- ListView list=null;
19
-
20
11
  @Override
21
12
  protected void onCreate(Bundle savedInstanceState) {
22
13
  super.onCreate(savedInstanceState);
23
14
  setContentView(R.layout.activity_main);
24
-
25
- //open helper
15
+
16
+
26
17
  MemoDBHelper memoDBHelper=new MemoDBHelper(this);
27
- SQLiteDatabase db=memoDBHelper.getWritableDatabase();
18
+ db=memoDBHelper.getWritableDatabase();
28
-
19
+
20
+
29
21
  ListView list = (ListView) findViewById(R.id.listView);
30
22
  mList = new ArrayList<Map<String, String>>();
31
23
 
32
24
 
33
25
  mAdapter = new SimpleAdapter(this,
34
26
  mList,
35
- //独自で定義したlayoutを適応する
36
- android.R.layout.simple_list_item_2,
27
+ android.R.layout.simple_list_item_2,
37
28
  new String[]{"title", "content", "data"}, //Map側のkey
38
- new int[]{android.R.id.text1, android.R.id.text2, R.id.eTxtData} //layout側のTextViewId 表示させたいMapのkey順に合わせる
29
+ new int[]{android.R.id.text1, android.R.id.text2, R.id.eTxtData}
39
30
  );
40
31
 
41
- // ListView にアダプターをセット
42
32
  list.setAdapter(mAdapter);
43
-
44
- // ListView のアイテム選択イベント
33
+
45
34
  list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
46
35
 
47
36
  @Override
48
- public void onItemClick(
49
- AdapterView<?> parent, View view, int pos, long id) {
37
+ public void onItemClick(AdapterView<?> parent, View view, int pos, long id) {
50
- Intent intent = new Intent(MainActivity.this, EditActivity.class);
51
38
 
39
+
40
+ Intent intent = new Intent(MainActivity.this, EditActivity.class);
41
+
42
+ // //これは編集だから から文字にする
52
43
  intent.putExtra("INSERT","");
44
+
53
45
  intent.putExtra("TITLE", mList.get(pos).get("title"));
54
46
  intent.putExtra("CONTENT", mList.get(pos).get("content"));
55
47
  intent.putExtra("DATA", mList.get(pos).get("data"));
56
48
 
57
49
 
50
+ Cursor c;
51
+ c=db.query(
52
+ UserContract.Users.TABLE_NAME,
53
+ null,//fields
54
+ null,//where
55
+ null,//where arg ここでは、多分何もせずに、全件取得して、リストに入れる
56
+ null,//groupBy
57
+ null,//having
58
+ null,//order by
59
+ null
60
+ );
61
+
62
+ if(c.moveToFirst()) {
63
+ Integer idd = c.getInt(UserContract.Users._ID);
64
+
65
+ c.close();
66
+
67
+ //ここにデータベースからしゅとくした値をいれる
68
+
69
+ intent.putExtra("ID", idd);
70
+ }
71
+
58
72
  startActivity(intent);
59
73
  }
60
74
  });
@@ -63,13 +77,17 @@
63
77
  registerForContextMenu(list);
64
78
  }
65
79
 
66
-
80
+
81
+
82
+
83
+
67
84
  @Override
68
85
  protected void onResume() {
69
86
  super.onResume();
70
87
 
71
88
  //open helper
89
+ //open db memoDBHelperに変更
72
- MemoDBHelper memoDBHelper=new MemoDBHelper(this);
90
+ MemoDBHelper memoDBHelper=new MemoDBHelper(this);
73
91
  SQLiteDatabase db=memoDBHelper.getWritableDatabase();
74
92
 
75
93
 
@@ -77,12 +95,15 @@
77
95
  // ListView 用アダプタのデータをクリア
78
96
  mList.clear();
79
97
 
80
- Integer id=null;
98
+ String id=null;
81
99
  String title = null;
82
100
  String content = null;
83
101
  String data=null;
84
102
 
103
+ //ここからコピペ
104
+
105
+ //これはselect
85
- Cursor c;
106
+ Cursor c;
86
107
  c=db.query(
87
108
  UserContract.Users.TABLE_NAME,
88
109
  null,//fields
@@ -94,18 +115,14 @@
94
115
  null
95
116
  );
96
117
 
97
- Log.v("DB_TEST","Count:"+c.getCount());
98
-
99
118
  Map<String, String> map = new HashMap<String, String>();
100
119
  while(c.moveToNext()){
101
- //ファイルからの取得は、moveToNextでいいけどデータベースは、それでいいの?
120
+
102
- id=c.getInt(c.getColumnIndex(UserContract.Users._ID));
103
121
  title=c.getString(c.getColumnIndex(UserContract.Users.COL_TITLE));
104
- content=c.getString(c.getColumnIndex(UserContract.Users.COL_CONTENT));
122
+ content=c.getString(c.getColumnIndex(UserContract.Users.COL_CONTENT));
105
- data=c.getString(c.getColumnIndex(UserContract.Users.COL_DATA));
123
+ data=c.getString(c.getColumnIndex(UserContract.Users.COL_DATA));
106
- Log.v("DB_TEST"," id: "+id+ "title: "+title+ "content: "+content+" data: "+data);
124
+
107
125
 
108
-
109
126
  map.put("title", title);
110
127
  map.put("content", content);
111
128
  map.put("data",data);
@@ -113,124 +130,155 @@
113
130
 
114
131
 
115
132
  }
133
+
134
+
116
- c.close();
135
+ c.close();
136
+
117
137
  db.close();
118
138
 
119
-
120
- // ListView のデータ変更を表示に反映
121
139
  mAdapter.notifyDataSetChanged();
122
140
  }
123
-
124
141
 
142
+ }
125
143
 
144
+ ```
145
+ //EditActivity
126
146
 
127
147
  ```
128
- //todoリストの中身を記入するEditActivityの保存ボタンを押す時に
129
- //intentにinsertだった時は、insertに文字を代入し、
130
- //updateの時は、intentに""(から文字)を代入しており、
131
- //それを、if文で、判断し、insertするかupdateするかを判定しているコードです。
132
- //updateのコードに問題はありますでしょうか?
133
- ```java
134
- ///////////この下に保存ボタンを押した時のinsertかupdateを判断して、
135
- データベースとやりとりするコードを記入しました。
136
- @Override
137
- public boolean onOptionsItemSelected(MenuItem item) {
138
148
 
139
- MemoDBHelper memoDBHelper = new MemoDBHelper(this);
149
+ public class EditActivity extends AppCompatActivity {
150
+
151
+
152
+ // メニュー選択時の処理
153
+ @Override
140
- SQLiteDatabase db = memoDBHelper.getWritableDatabase();
154
+ public boolean onOptionsItemSelected(MenuItem item) {
141
155
 
142
- Cursor c = null;
143
- String title = null;
144
- String content = null;
156
+ //open helper
145
- String data = null;
157
+ //open db memoDBHelperに変更
146
- EditText eTxtTitle = null;
158
+ MemoDBHelper memoDBHelper = new MemoDBHelper(this);
147
- EditText eTxtContent = null;
159
+ SQLiteDatabase db = memoDBHelper.getWritableDatabase();
148
- EditText eTxtData = null;
149
160
 
150
- //ここのidにcancelとupdateを入れる
151
- switch (item.getItemId()) {
152
- case R.id.action_can:
153
- //キャンセルが押された場合
154
- mNotSave = true;
155
- this.finish();
156
- break;
157
161
 
162
+ Cursor c = null;
163
+ String title = null;
164
+ String content = null;
165
+ String data = null;
166
+ EditText eTxtTitle = null;
167
+ EditText eTxtContent = null;
168
+ EditText eTxtData = null;
169
+
170
+ //ここのidにcancelとupdateを入れる
171
+ switch (item.getItemId()) {
172
+ case R.id.action_can:
173
+ //キャンセルが押された場合
174
+ mNotSave = true;
175
+ this.finish();
176
+ break;
177
+
158
- case R.id.action_upd:
178
+ case R.id.action_upd:
179
+
180
+ // タイトル、内容、実行日の追加
159
- eTxtTitle = (EditText) findViewById(R.id.eTxtTitle);
181
+ eTxtTitle = (EditText) findViewById(R.id.eTxtTitle);
160
182
  eTxtContent = (EditText) findViewById(R.id.eTxtContent);
161
183
  eTxtData = (EditText) findViewById(R.id.eTxtData);
162
184
  title = eTxtTitle.getText().toString();
163
185
  content = eTxtContent.getText().toString();
164
186
  data = eTxtData.getText().toString();
187
+
165
- Intent intent = getIntent();
188
+ Intent intent = getIntent();
166
189
  //あえてinsertkに変更
167
190
  String insertk = intent.getStringExtra("INSERT");
168
191
 
169
- /////////////////////この上のコードを追加しました。
170
- if (insertk.length() == 0) {
192
+ Integer idd=intent.getIntExtra("ID",0);
193
+ //第二引きううには、初期値を入れるみたい
171
194
 
172
- //つまりinsertじゃない つまりupdate
173
- try {
174
- //書き換えをしていく
175
- ContentValues newData = new ContentValues();
195
+ if (title.isEmpty() || content.isEmpty()) {
176
- newData.put(UserContract.Users.COL_DATA, data);
196
+ Toast.makeText(this, R.string.msg_destruction, Toast.LENGTH_SHORT).show();
177
- int updateCount = db.update(
178
- UserContract.Users.TABLE_NAME,
179
- newData,
180
- UserContract.Users.COL_TITLE + "= ?",
181
- new String[]{title}
182
- );
183
197
 
198
+ }
184
199
 
185
- ContentValues newContent = new ContentValues();
186
- newContent.put(UserContract.Users.COL_CONTENT, content);
187
- int updateCount1 = db.update(
200
+ if (insertk.length() == 0) {
188
- UserContract.Users.TABLE_NAME,
189
- newContent,
190
- UserContract.Users.COL_TITLE + "= ?",
191
- new String[]{title}
192
- );
193
201
 
202
+ //ここにinsertkの長さを表す
203
+ Log.v("ああああああああああ","time:"+"+ insertk.length()+ ");
204
+ //updateの時は、ああああああと出るが、
205
+ //アップデートされていない
206
+ try {
207
+
194
- ContentValues newTitle = new ContentValues();
208
+ ContentValues newData = new ContentValues();
195
- newTitle.put(UserContract.Users.COL_TITLE, title);
209
+ newData.put(UserContract.Users.COL_DATA, data);
196
- int updateCount2 = db.update(
210
+ int updateCount = db.update(
197
- UserContract.Users.TABLE_NAME,
198
- newTitle,
199
- UserContract.Users.COL_TITLE + "= ?",
200
- new String[]{title}
201
- );
202
211
 
203
- //保存に成功しました。
204
- Toast.makeText(this, R.string.msg_upd, Toast.LENGTH_SHORT).show();
205
- } catch (Exception e) {
212
+ UserContract.Users.TABLE_NAME,
213
+ newData,
206
- Toast.makeText(this, "強制returnしました。", Toast.LENGTH_LONG).show();
214
+ Long.toString(UserContract.Users._ID) +"=" + Long.toString(idd),
207
- }
208
- //updateCount1とか2とかは、エラーのやつでしょ?
209
- } else {
215
+ null
216
+ );
210
217
 
218
+
211
- //これは insert
219
+ ContentValues newContent = new ContentValues();
220
+ newContent.put(UserContract.Users.COL_CONTENT, content);
212
- //insert をEditの中でやる
221
+ int updateCount1 = db.update(
213
- // データをtextから取得して表示するコード
214
222
 
215
- try {
216
- //この下のinsertには、updateのように、textから取得したデータをinsertする
217
223
 
218
- ContentValues newUser = new ContentValues();
219
- newUser.put(UserContract.Users.COL_TITLE,title);
220
- newUser.put(UserContract.Users.COL_CONTENT,content);
221
- newUser.put(UserContract.Users.COL_DATA, data);
222
- long newId = db.insert(UserContract.Users.TABLE_NAME,
224
+ UserContract.Users.TABLE_NAME,
225
+ newData,
226
+ Long.toString(UserContract.Users._ID) +"=" + Long.toString(idd),
223
- null,
227
+ null
224
- newUser
225
- );
228
+ );
226
- //close db
227
- //保存に成功しました。
228
229
 
230
+ ContentValues newTitle = new ContentValues();
231
+ newTitle.put(UserContract.Users.COL_TITLE, title);
232
+ int updateCount2 = db.update(
233
+
234
+
235
+ UserContract.Users.TABLE_NAME,
236
+ newData,
237
+ Long.toString(UserContract.Users._ID) +"=" + Long.toString(idd),
238
+ null
239
+ );
240
+
241
+ //保存に成功しました。
229
- Toast.makeText(this, R.string.msg_upd, Toast.LENGTH_SHORT).show();
242
+ Toast.makeText(this, R.string.msg_upd, Toast.LENGTH_SHORT).show();
230
- } catch (Exception e) {
243
+ } catch (Exception e) {
231
- Toast.makeText(this, "強制returnしました。", Toast.LENGTH_LONG).show();
244
+ Toast.makeText(this, "強制returnしました。", Toast.LENGTH_LONG).show();
245
+ }
246
+ } else {
247
+
248
+ Log.v("いいいいいいいいいい","time:"+"+ insertk.length()+ ");
249
+
250
+ //insertするといいいいと表示されるが、
251
+ //リストは、同じ物となる
252
+ //つまりセレクトがおかしいのではないか?
253
+
254
+ //これは insert
255
+ // データをtextから取得して表示するコード
256
+
257
+ try {
258
+ //この下のinsertには、updateのように、textから取得したデータをinsertする
259
+
260
+ ContentValues newUser = new ContentValues();
261
+ newUser.put(UserContract.Users.COL_TITLE,title);
262
+ newUser.put(UserContract.Users.COL_CONTENT,content);
263
+ newUser.put(UserContract.Users.COL_DATA, data);
264
+ long newId = db.insert(UserContract.Users.TABLE_NAME,
265
+ null,
266
+ newUser
267
+ );
268
+ //close db
269
+
270
+ Toast.makeText(this, R.string.msg_upd, Toast.LENGTH_SHORT).show();
271
+ } catch (Exception e) {
272
+ Toast.makeText(this, "強制returnしました。", Toast.LENGTH_LONG).show();
273
+ }
274
+
275
+ }
276
+
277
+
278
+ db.close();
279
+ }
280
+ return super.onOptionsItemSelected(item);
281
+
232
282
  }
233
-
234
283
  }
235
- }
236
284
  ```

5

コードを追加しました。

2017/04/18 05:06

投稿

edoooooo
edoooooo

スコア478

title CHANGED
File without changes
body CHANGED
@@ -162,6 +162,9 @@
162
162
  title = eTxtTitle.getText().toString();
163
163
  content = eTxtContent.getText().toString();
164
164
  data = eTxtData.getText().toString();
165
+ Intent intent = getIntent();
166
+ //あえてinsertkに変更
167
+ String insertk = intent.getStringExtra("INSERT");
165
168
 
166
169
  /////////////////////この上のコードを追加しました。
167
170
  if (insertk.length() == 0) {

4

}の追加

2017/04/17 17:54

投稿

edoooooo
edoooooo

スコア478

title CHANGED
File without changes
body CHANGED
@@ -229,4 +229,5 @@
229
229
  }
230
230
 
231
231
  }
232
+ }
232
233
  ```

3

コードの追加

2017/04/17 14:18

投稿

edoooooo
edoooooo

スコア478

title CHANGED
File without changes
body CHANGED
@@ -131,6 +131,39 @@
131
131
  //それを、if文で、判断し、insertするかupdateするかを判定しているコードです。
132
132
  //updateのコードに問題はありますでしょうか?
133
133
  ```java
134
+ ///////////この下に保存ボタンを押した時のinsertかupdateを判断して、
135
+ データベースとやりとりするコードを記入しました。
136
+ @Override
137
+ public boolean onOptionsItemSelected(MenuItem item) {
138
+
139
+ MemoDBHelper memoDBHelper = new MemoDBHelper(this);
140
+ SQLiteDatabase db = memoDBHelper.getWritableDatabase();
141
+
142
+ Cursor c = null;
143
+ String title = null;
144
+ String content = null;
145
+ String data = null;
146
+ EditText eTxtTitle = null;
147
+ EditText eTxtContent = null;
148
+ EditText eTxtData = null;
149
+
150
+ //ここのidにcancelとupdateを入れる
151
+ switch (item.getItemId()) {
152
+ case R.id.action_can:
153
+ //キャンセルが押された場合
154
+ mNotSave = true;
155
+ this.finish();
156
+ break;
157
+
158
+ case R.id.action_upd:
159
+ eTxtTitle = (EditText) findViewById(R.id.eTxtTitle);
160
+ eTxtContent = (EditText) findViewById(R.id.eTxtContent);
161
+ eTxtData = (EditText) findViewById(R.id.eTxtData);
162
+ title = eTxtTitle.getText().toString();
163
+ content = eTxtContent.getText().toString();
164
+ data = eTxtData.getText().toString();
165
+
166
+ /////////////////////この上のコードを追加しました。
134
167
  if (insertk.length() == 0) {
135
168
 
136
169
  //つまりinsertじゃない つまりupdate

2

コードの追加

2017/04/17 13:46

投稿

edoooooo
edoooooo

スコア478

title CHANGED
File without changes
body CHANGED
@@ -124,4 +124,76 @@
124
124
 
125
125
 
126
126
 
127
+ ```
128
+ //todoリストの中身を記入するEditActivityの保存ボタンを押す時に
129
+ //intentにinsertだった時は、insertに文字を代入し、
130
+ //updateの時は、intentに""(から文字)を代入しており、
131
+ //それを、if文で、判断し、insertするかupdateするかを判定しているコードです。
132
+ //updateのコードに問題はありますでしょうか?
133
+ ```java
134
+ if (insertk.length() == 0) {
135
+
136
+ //つまりinsertじゃない つまりupdate
137
+ try {
138
+ //書き換えをしていく
139
+ ContentValues newData = new ContentValues();
140
+ newData.put(UserContract.Users.COL_DATA, data);
141
+ int updateCount = db.update(
142
+ UserContract.Users.TABLE_NAME,
143
+ newData,
144
+ UserContract.Users.COL_TITLE + "= ?",
145
+ new String[]{title}
146
+ );
147
+
148
+
149
+ ContentValues newContent = new ContentValues();
150
+ newContent.put(UserContract.Users.COL_CONTENT, content);
151
+ int updateCount1 = db.update(
152
+ UserContract.Users.TABLE_NAME,
153
+ newContent,
154
+ UserContract.Users.COL_TITLE + "= ?",
155
+ new String[]{title}
156
+ );
157
+
158
+ ContentValues newTitle = new ContentValues();
159
+ newTitle.put(UserContract.Users.COL_TITLE, title);
160
+ int updateCount2 = db.update(
161
+ UserContract.Users.TABLE_NAME,
162
+ newTitle,
163
+ UserContract.Users.COL_TITLE + "= ?",
164
+ new String[]{title}
165
+ );
166
+
167
+ //保存に成功しました。
168
+ Toast.makeText(this, R.string.msg_upd, Toast.LENGTH_SHORT).show();
169
+ } catch (Exception e) {
170
+ Toast.makeText(this, "強制returnしました。", Toast.LENGTH_LONG).show();
171
+ }
172
+ //updateCount1とか2とかは、エラーのやつでしょ?
173
+ } else {
174
+
175
+ //これは insert
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,title);
184
+ newUser.put(UserContract.Users.COL_CONTENT,content);
185
+ newUser.put(UserContract.Users.COL_DATA, data);
186
+ long newId = db.insert(UserContract.Users.TABLE_NAME,
187
+ null,
188
+ newUser
189
+ );
190
+ //close db
191
+ //保存に成功しました。
192
+
193
+ Toast.makeText(this, R.string.msg_upd, Toast.LENGTH_SHORT).show();
194
+ } catch (Exception e) {
195
+ Toast.makeText(this, "強制returnしました。", Toast.LENGTH_LONG).show();
196
+ }
197
+
198
+ }
127
199
  ```

1

コードの変更

2017/04/17 12:48

投稿

edoooooo
edoooooo

スコア478

title CHANGED
File without changes
body CHANGED
@@ -123,83 +123,5 @@
123
123
 
124
124
 
125
125
 
126
- // メニュー作成処理
127
- @Override
128
- public boolean onCreateOptionsMenu(Menu menu) {
129
- getMenuInflater().inflate(R.menu.main, menu);
130
- return true;
131
- }
132
126
 
133
-
134
- // メニュー選択処理
135
- @Override
136
- public boolean onOptionsItemSelected(MenuItem item) {
137
-
138
- MemoDBHelper memoDBHelper = new MemoDBHelper(this);
139
- SQLiteDatabase db = memoDBHelper.getWritableDatabase();
140
-
141
- switch (item.getItemId()) {
142
-
143
- //ここに追加のinsertのコードをそのまま入れちゃう
144
- case R.id.action_add:
145
- // [追加] 選択時の処理
146
-
147
- //insertは、true2セット(addだから)
148
- Intent intent = new Intent(MainActivity.this, EditActivity.class);
149
- intent.putExtra("INSERT","insertです。");
150
-
151
- startActivity(intent);
152
-
153
- break;
154
- default:
155
- break;
156
-
157
-
158
- }
159
- return super.onOptionsItemSelected(item);
160
- }
161
- // コンテキストメニュー作成処理
162
- @Override
163
- public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo info) {
164
- super.onCreateContextMenu(menu, view, info);
165
- getMenuInflater().inflate(R.menu.main_context, menu);
166
- }
167
-
168
-
169
-
170
- // コンテキストメニュー選択処理(削除)
171
- @Override
172
- public boolean onContextItemSelected(MenuItem item) {
173
-
174
- //open helper
175
- //open db memoDBHelperに変更
176
- MemoDBHelper memoDBHelper=new MemoDBHelper(this);
177
- SQLiteDatabase db=memoDBHelper.getWritableDatabase();
178
-
179
-
180
- AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
181
- switch(item.getItemId()) {
182
- case R.id.context_del:
183
- int deleteCount = db.delete(
184
- UserContract.Users.TABLE_NAME,
185
- UserContract.Users._ID + " = ?",
186
- //これは、当時のタイトルを取得して、それをデータベースから消すようにする
187
- new String[] {"どうやって取得する?" }
188
- );
189
- //このうえ
190
-
191
- Toast.makeText(this, R.string.msg_del, Toast.LENGTH_SHORT).show();
192
- // リストから削除
193
- mList.remove(info.position);
194
- // ListView のデータ変更を表示に反映
195
- mAdapter.notifyDataSetChanged();
196
- break;
197
- default:
198
- break;
199
- }
200
-
201
- return false;
202
- }
203
- }
204
-
205
127
  ```