· 8 years ago · Feb 08, 2018, 01:12 PM
1public void funRead(ListView listView) {
2 db = abcDbHelper.getReadableDatabase();
3
4 String[] columns = {AbcDbContract.TableWords.COLUMN_NAME_ID, AbcDbContract.TableWords.COLUMN_NAME_EN, AbcDbContract.TableWords.COLUMN_NAME_RU};
5 cursor = db.query(AbcDbContract.TableWords.TABLE_NAME, columns, null, null, null, null, null);
6
7 int[] items = {R.id.textViewItem1, R.id.textViewItem2, R.id.textViewItem3};
8
9 simpleCursorAdapter = new SimpleCursorAdapter(context, R.layout.item, cursor, columns, items, 0);
10
11 listView.setAdapter(simpleCursorAdapter);
12
13 cursor.close();
14 db.close();
15 }
16
17<?xml version="1.0" encoding="utf-8"?>
18<LinearLayout
19 xmlns:android="http://schemas.android.com/apk/res/android"
20 android:layout_width="match_parent"
21 android:layout_height="match_parent">
22
23 <LinearLayout
24 android:orientation="horizontal"
25 android:layout_width="match_parent"
26 android:layout_height="wrap_content">
27
28 <TextView
29 android:text=""
30 android:textColor="#5cb85c"
31 android:textSize="16sp"
32 android:gravity="center_vertical"
33 android:layout_width="wrap_content"
34 android:layout_height="30dp"
35 android:id="@+id/textViewItem1"
36 android:layout_weight="1"/>
37
38 <TextView
39 android:text=""
40 android:textColor="#428bca"
41 android:textSize="16sp"
42 android:gravity="center_vertical"
43 android:layout_width="wrap_content"
44 android:layout_height="30dp"
45 android:id="@+id/textViewItem2"
46 android:layout_weight="2"/>
47
48 <TextView
49 android:text=""
50 android:textColor="#d9534f"
51 android:textSize="16sp"
52 android:gravity="center_vertical"
53 android:layout_width="wrap_content"
54 android:layout_height="30dp"
55 android:id="@+id/textViewItem3"
56 android:layout_weight="2"/>
57
58 </LinearLayout>
59</LinearLayout>
60
61<?xml version="1.0" encoding="utf-8"?>
62<LinearLayout
63 xmlns:android="http://schemas.android.com/apk/res/android"
64 android:id="@+id/activity_main"
65 android:orientation="vertical"
66 android:minWidth="25dp"
67 android:minHeight="25dp"
68 android:layout_width="match_parent"
69 android:layout_height="match_parent">
70
71 <LinearLayout
72 android:orientation="horizontal"
73 android:layout_margin="2dp"
74 android:padding="2dp"
75 android:background="#428bca"
76 android:layout_width="match_parent"
77 android:layout_height="wrap_content">
78 <TextView
79 android:text="en"
80 android:textStyle="bold"
81 android:textSize="18sp"
82 android:textColor="#f9f9f9"
83 android:background="#428bca"
84 android:gravity="center"
85 android:layout_margin="1dp"
86 android:layout_width="35dp"
87 android:layout_height="35dp" />
88 <EditText
89 android:text=""
90 android:textCursorDrawable="@null"
91 android:textColor="#428bca"
92 android:textSize="18sp"
93 android:layout_width="match_parent"
94 android:layout_height="35dp"
95 android:inputType="textPersonName"
96 android:ems="10"
97 android:paddingLeft="5dp"
98 android:layout_margin="2dp"
99 android:background="#f9f9f9"
100 android:id="@+id/editText1"
101 android:layout_weight="1"/>
102 </LinearLayout>
103
104 <LinearLayout
105 android:orientation="horizontal"
106 android:layout_margin="2dp"
107 android:padding="2dp"
108 android:background="#d9534f"
109 android:layout_width="match_parent"
110 android:layout_height="wrap_content">
111 <TextView
112 android:text="ru"
113 android:textStyle="bold"
114 android:textSize="18sp"
115 android:textColor="#f9f9f9"
116 android:background="#d9534f"
117 android:gravity="center"
118 android:layout_margin="1dp"
119 android:layout_width="35dp"
120 android:layout_height="35dp" />
121 <EditText
122 android:text=""
123 android:textCursorDrawable="@null"
124 android:textColor="#d9534f"
125 android:textSize="18sp"
126 android:layout_width="match_parent"
127 android:layout_height="35dp"
128 android:inputType="textPersonName"
129 android:ems="10"
130 android:paddingLeft="5dp"
131 android:layout_margin="2dp"
132 android:background="#f9f9f9"
133 android:id="@+id/editText2"
134 android:layout_weight="1"/>
135 </LinearLayout>
136
137 <LinearLayout
138 android:orientation="horizontal"
139 android:layout_margin="2dp"
140 android:layout_width="match_parent"
141 android:layout_height="wrap_content">
142
143 <Button
144 android:text="OK"
145 android:textStyle="bold"
146 android:textSize="18sp"
147 android:textColor="#f9f9f9"
148 android:background="#5cb85c"
149 android:layout_width="match_parent"
150 android:layout_height="wrap_content"
151 android:id="@+id/button1"
152 android:onClick="button1Click"
153 android:layout_weight="1"/>
154 </LinearLayout>
155
156 <LinearLayout
157 android:orientation="horizontal"
158 android:layout_margin="2dp"
159 android:layout_width="match_parent"
160 android:layout_height="wrap_content">
161
162 <ListView
163 android:layout_width="match_parent"
164 android:layout_height="match_parent"
165 android:id="@+id/listView1"/>
166 </LinearLayout>
167
168</LinearLayout>
169
170package ru.site.a1;
171
172import android.provider.BaseColumns;
173
174//клаÑÑ ÐºÐ¾Ð½Ñ‚Ñ€Ð°ÐºÑ‚ определÑющий Ñхему БД
175public final class AbcDbContract {
176
177 //закрытый конÑтруктор не допуÑкает Ñоздание объектов
178 private AbcDbContract() {}
179
180 //Ð¸Ð¼Ñ Ð‘Ð”
181 public static final String DATA_BASE_NAME = "abc.db";
182
183 //номер верÑии БД
184 public static final int DATA_BASE_VERSION = 1;
185
186 //клаÑÑ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñет Ð¸Ð¼Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ и имена Ñтолбцов
187 public static abstract class TableWords implements BaseColumns {
188 //Ð¸Ð¼Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹
189 public static final String TABLE_NAME = "table_words";
190 //имена Ñтолбцов
191 public static final String COLUMN_NAME_ID = BaseColumns._ID;
192 public static final String COLUMN_NAME_EN = "en";
193 public static final String COLUMN_NAME_RU = "ru";
194 }
195
196 //SQL-Ð·Ð°Ð¿Ñ€Ð¾Ñ : Ñоздание или открытие таблицы
197 public static final String SQL_CREATE_TABLE_WORDS = "CREATE TABLE IF NOT EXISTS " + TableWords.TABLE_NAME + " (" + TableWords.COLUMN_NAME_ID + " INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " + TableWords.COLUMN_NAME_EN + " TEXT NOT NULL, " + TableWords.COLUMN_NAME_RU + " TEXT NOT NULL);";
198
199 //SQL-Ð·Ð°Ð¿Ñ€Ð¾Ñ : удаление таблицы
200 public static final String SQL_DELETE_TABLE_WORDS = "DROP TABLE IF EXISTS " + TableWords.TABLE_NAME;
201}
202
203package ru.site.a1;
204
205import android.content.Context;
206import android.database.sqlite.SQLiteDatabase;
207import android.database.sqlite.SQLiteOpenHelper;
208
209public class AbcDbHelper extends SQLiteOpenHelper {
210
211 public AbcDbHelper(Context context) {
212 super(context, AbcDbContract.DATA_BASE_NAME, null, AbcDbContract.DATA_BASE_VERSION);
213 }
214
215 //метод вызываетÑÑ Ð¿Ñ€Ð¸ Ñоздании БД
216 @Override
217 public void onCreate(SQLiteDatabase db) {
218 db.execSQL(AbcDbContract.SQL_CREATE_TABLE_WORDS);
219 }
220
221 //метод вызываетÑÑ Ð¿Ñ€Ð¸ обновлении БД
222 @Override
223 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
224 db.execSQL(AbcDbContract.SQL_DELETE_TABLE_WORDS);
225 onCreate(db);
226 }
227
228}
229
230package ru.site.a1;
231
232import android.content.ContentValues;
233import android.content.Context;
234import android.database.Cursor;
235import android.database.sqlite.SQLiteDatabase;
236import android.widget.EditText;
237import android.widget.ListView;
238import android.widget.SimpleCursorAdapter;
239
240public class AbcDb {
241
242 private Context context;
243 private AbcDbHelper abcDbHelper;
244 private SQLiteDatabase db;
245 private Cursor cursor;
246 private SimpleCursorAdapter simpleCursorAdapter;
247 private ContentValues contentValues;
248
249 public AbcDb(Context context) {
250 this.context = context;
251 abcDbHelper = new AbcDbHelper(context);
252 }
253
254 //метод : запиÑÑŒ данных
255 public void funWrite(EditText editText1, EditText editText2) {
256 db = abcDbHelper.getWritableDatabase();
257 contentValues = new ContentValues();
258
259 //добавление в Ñтроку Ð¸Ð¼Ñ Ñтолбца и значение
260 contentValues.put(AbcDbContract.TableWords.COLUMN_NAME_EN, editText1.getText().toString());
261 contentValues.put(AbcDbContract.TableWords.COLUMN_NAME_RU, editText2.getText().toString());
262 //вÑтавка Ñтроки в таблицу (Ð¸Ð¼Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹, еÑли пуÑÑ‚Ð°Ñ Ñтрока, объект ContentValues)
263 db.insert(AbcDbContract.TableWords.TABLE_NAME, null, contentValues);
264
265 db.close();
266 }
267
268 //метод : чтение данных
269 public void funRead(ListView listView) {
270 db = abcDbHelper.getReadableDatabase();
271
272 String[] columns = {AbcDbContract.TableWords.COLUMN_NAME_ID, AbcDbContract.TableWords.COLUMN_NAME_EN, AbcDbContract.TableWords.COLUMN_NAME_RU};
273 cursor = db.query(AbcDbContract.TableWords.TABLE_NAME, columns, null, null, null, null, null);
274
275 int[] items = {R.id.textViewItem1, R.id.textViewItem2, R.id.textViewItem3};
276
277 simpleCursorAdapter = new SimpleCursorAdapter(context, R.layout.item, cursor, columns, items, 0);
278
279 listView.setAdapter(simpleCursorAdapter);
280
281 cursor.close();
282 db.close();
283 }
284
285}
286
287package ru.site.a1;
288
289import android.os.Bundle;
290import android.support.v7.app.AppCompatActivity;
291import android.view.View;
292import android.widget.EditText;
293import android.widget.ListView;
294import android.widget.Toast;
295
296public class MainActivity extends AppCompatActivity {
297
298 private EditText editText1;
299 private EditText editText2;
300 private ListView listView1;
301
302 private AbcDb abcDb;
303
304 @Override
305 protected void onCreate(Bundle savedInstanceState) {
306 super.onCreate(savedInstanceState);
307 setContentView(R.layout.activity_main);
308
309 editText1 = (EditText) findViewById(R.id.editText1);
310 editText2 = (EditText) findViewById(R.id.editText2);
311 listView1 = (ListView) findViewById(R.id.listView1);
312
313 abcDb = new AbcDb(this);
314
315 //чтение данных
316 abcDb.funRead(listView1);
317 }
318
319 public void button1Click(View view) {
320
321 //проверка на пуÑтоту Ð¿Ð¾Ð»Ñ Ð²Ð²Ð¾Ð´Ð°
322 if(editText1.getText().toString().equals("") | editText2.getText().toString().equals("")) {
323 Toast.makeText(this, "Заполните поле ввода", Toast.LENGTH_SHORT).show();
324 }
325 else {
326 //запиÑÑŒ и чтение данных
327 abcDb.funWrite(editText1, editText2);
328 abcDb.funRead(listView1);
329
330 //очиÑтка Ð¿Ð¾Ð»Ñ Ð²Ð²Ð¾Ð´Ð°
331 editText1.setText("");
332 editText2.setText("");
333 //уÑтановка фокуÑа
334 editText1.requestFocus();
335 }
336
337 }
338}
339
3401 E/AndroidRuntime: FATAL EXCEPTION: main
341Process: ru.site.a1, PID: 16421
342android.database.StaleDataException: Attempting to access a closed CursorWindow.Most probable cause: cursor is deactivated prior to calling this method.
343at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:139)
344at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50)
345at android.widget.SimpleCursorAdapter.bindView(SimpleCursorAdapter.java:150)
346at android.widget.CursorAdapter.getView(CursorAdapter.java:254)
347at android.widget.AbsListView.obtainView(AbsListView.java:2828)
348at android.widget.ListView.measureHeightOfChildren(ListView.java:1294)
349at android.widget.ListView.onMeasure(ListView.java:1206)
350at android.view.View.measure(View.java:18926)
351at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5908)
352at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1435)
353at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1082)
354at android.widget.LinearLayout.onMeasure(LinearLayout.java:614)
355at android.view.View.measure(View.java:18926)
356at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5908)
357at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1435)
358at android.widget.LinearLayout.measureVertical(LinearLayout.java:721)
359at android.widget.LinearLayout.onMeasure(LinearLayout.java:612)
360at android.view.View.measure(View.java:18926)
361at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5908)
362at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
363at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135)
364at android.view.View.measure(View.java:18926)
365at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5908)
366at android.support.v7.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:391)
367at android.view.View.measure(View.java:18926)
368at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5908)
369at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
370at android.view.View.measure(View.java:18926)
371at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5908)
372at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1435)
373at android.widget.LinearLayout.measureVertical(LinearLayout.java:721)
374at android.widget.LinearLayout.onMeasure(LinearLayout.java:612)
375at android.view.View.measure(View.java:18926)
376at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5908)
377at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
378at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:3076)
379at android.view.View.measure(View.java:18926)
380at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2411)
381at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1429)
382at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1677)
383at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1314)
384at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7057)
385at android.view.Choreographer$CallbackRecord.run(Choreographer.java:829)
386at android.view.Choreographer.doCallbacks(Choreographer.java:606)
387at android.view.Choreographer.doFrame(Choreographer.java:576)
388at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:815)
389at android.os.Handler.handleCallback(Handler.java:739)
390at android.os.Handler.dispatchMessage(Handler.java:95)
391at android.os.Looper.loop(Looper.java:145)
392at android.app.ActivityThread.main(ActivityThread.java:7007)
393at java.lang.reflect.Method.invoke(Native Method)
394at java.lang.reflect.Method.invoke(Method.java:372)
395at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
396at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)