· 9 years ago · Nov 11, 2016, 09:00 AM
1/**
2 * table note contain id, title, content
3 */
4public static final String TABLE_DATA_NAME = "tb_mydata";
5public static final String TABLE_SETTING_NAME = "tb_mysetting";
6public static final String NOTE_COLUMN_ID = "id";
7public static final String NOTE_COLUMN_COLOR = "color";
8public static final String NOTE_COLUMN_SENSORID = "sensorid";
9public static final String NOTE_COLUMN_TITLE = "title";
10public static final String NOTE_COLUMN_VALUE = "value";
11public static final String NOTE_COLUMN_TIME = "time";
12public static final String NOTE_SETTING_LOC = "loc";
13public static final String NOTE_SETTING_LANG = "lang";
14public static final String NOTE_SETTING_SENS = "sensitive";
15/**
16 * string for create table note
17 */
18public static final String CREATE_TABLE_DATA_NOTE =
19 "CREATE TABLE " + TABLE_DATA_NAME + "(" +
20 NOTE_COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL" +
21 "," + NOTE_COLUMN_SENSORID + "INTEGER" +
22 "," + NOTE_COLUMN_TITLE + " TEXT NOT NULL" +
23 "," + NOTE_COLUMN_VALUE + " TEXT NOT NULL" +
24 "," + NOTE_COLUMN_TIME + "DATETIME" +
25 "," + NOTE_COLUMN_COLOR + "TEXT" +
26 ")";
27public static final String CREATE_TABLE_SETTING_NOTE =
28 "CREATE TABLE " + TABLE_SETTING_NAME + "(" +
29 NOTE_COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL" +
30 "," + NOTE_SETTING_LANG + "TEXT NOT NULL" +
31 "," + NOTE_SETTING_LOC + " TEXT NOT NULL" +
32 "," + NOTE_SETTING_SENS + " TEXT NOT NULL" +
33 ")";
34
35/**
36 * value for update database
37 */
38public static final int DATA_VERSION = 1;
39
40/**
41 * Sqlite database
42 */
43private SQLiteDatabase db;
44
45public MySQLHelper(Context context) {
46
47 super(context, DATABASE_NAME, null, DATA_VERSION);
48}
49
50/**
51 * create db when app start, and only call when database don't create
52 * When database created, it will not call
53 */
54@Override
55public void onCreate(SQLiteDatabase db) {
56 db.execSQL(CREATE_TABLE_DATA_NOTE);
57 db.execSQL(CREATE_TABLE_SETTING_NOTE);
58}
59
60/**
61 * call when change DATA_VERSION
62 * help we update database
63 */
64@Override
65public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
66 // TODO Auto-generated method stub
67 db.execSQL("DROP TABLE IF EXISTS contacts");
68 onCreate(db);
69}
70
71/**
72 * open database
73 */
74public void open() {
75 try {
76 db = getWritableDatabase();
77 } catch (Exception e) {
78 e.printStackTrace();
79 }
80}
81
82/**
83 * close database
84 */
85public void close() {
86 if (db != null && db.isOpen()) {
87 try {
88 db.close();
89 } catch (SQLException e) {
90 e.printStackTrace();
91 }
92 }
93}
94
95public Cursor getAll(String sql) {
96 open();
97 Cursor cursor = db.rawQuery(sql, null);
98 if (cursor != null) {
99 cursor.moveToFirst();
100 }
101 close();
102 return cursor;
103}
104
105
106public boolean insertNote(String sensorid, String title, String value, String time, String color) {
107 SQLiteDatabase db = this.getWritableDatabase();
108 ContentValues contentValues = new ContentValues();
109 contentValues.put(NOTE_COLUMN_SENSORID,sensorid);
110 contentValues.put(NOTE_COLUMN_TITLE, title);
111 contentValues.put(NOTE_COLUMN_VALUE, value);
112 contentValues.put(NOTE_COLUMN_TIME,time);
113 contentValues.put(NOTE_COLUMN_COLOR, color);
114 try {
115 db.insert(TABLE_DATA_NAME, null, contentValues);
116 return true;
117 } catch (Exception e) {
118 return false;
119 }
120}
121
122public boolean insertSettingNote(String lang, String loc, String sens) {
123 SQLiteDatabase db = this.getWritableDatabase();
124 ContentValues contentValues = new ContentValues();
125 contentValues.put(NOTE_SETTING_LANG,lang);
126 contentValues.put(NOTE_SETTING_LOC, loc);
127 contentValues.put(NOTE_SETTING_SENS, sens);
128 try {
129 db.insert(TABLE_SETTING_NAME, null, contentValues);
130 return true;
131 } catch (Exception e) {
132 return false;
133 }
134}
135
136/**
137 * update values to table
138 *
139 * @return index row update
140 */
141public boolean update(String table, ContentValues values, String where) {
142 open();
143 //values.put();
144 long index = db.update(table, values, where, null);
145 close();
146 return index > 0;
147}
148
149
150
151/**
152 * delete id row of table
153 */
154public boolean delete(String table, String where) {
155 open();
156 long index = db.delete(table, where, null);
157 close();
158 return index > 0;
159}
160
161public Note getNote(String sql) {
162 Note note = null;
163 Cursor cursor = getAll(sql);
164 if (cursor != null) {
165 note = cursorToNote(cursor);
166 cursor.close();
167 }
168 return note;
169}
170public SettingNote getSettingNote(String sql) {
171 SettingNote stnote = null;
172 Cursor cursor = getAll(sql);
173 if (cursor != null) {
174 stnote = cursorToSettingNote(cursor);
175 cursor.close();
176 }
177 return stnote;
178}
179
180/**
181 * @param sql get all notes with sql command
182 * @return arraylist of note
183 */
184public ArrayList<Note> getListNote(String sql) {
185 ArrayList<Note> list = new ArrayList<>();
186 Cursor cursor = getAll(sql);
187
188 while (!cursor.isAfterLast()) {
189 list.add(cursorToNote(cursor));
190 cursor.moveToNext();
191 }
192 cursor.close();
193
194 return list;
195}
196
197/**
198 * insert note to table
199 *
200 * @param note note to insert
201 * @return id of note
202 */
203
204
205/**
206 * @param note note to update
207 * @return id of note update
208 */
209public boolean updateNote(Note note) {
210 return update(TABLE_DATA_NAME, noteToValues(note), NOTE_COLUMN_ID + " = " + note.getId());
211}
212
213/**
214 * delete id row of table
215 */
216public boolean deleteNote(Note note) {
217 return delete(TABLE_DATA_NAME, NOTE_COLUMN_ID + " = " + note.getId());
218}
219
220/**
221 * convert note to contentvalues
222 * don't put id of note because
223 * when insert id will auto create
224 * when update we don't update id
225 */
226private ContentValues noteToValues(Note note) {
227 ContentValues values = new ContentValues();
228 values.put(NOTE_COLUMN_TITLE, note.getTitle());
229 values.put(NOTE_COLUMN_VALUE, note.getValue());
230 return values;
231}
232
233private ContentValues noteToValues(SettingNote stnote) {
234 ContentValues values = new ContentValues();
235 values.put(NOTE_SETTING_SENS, stnote.getSensitive());
236 values.put(NOTE_SETTING_LOC, stnote.getLoc());
237 values.put(NOTE_SETTING_LANG, stnote.getLang());
238 return values;
239}
240/**
241 * convert cursor to note
242 */
243private Note cursorToNote(Cursor cursor) {
244 Note note = new Note();
245 note.setId(cursor.getInt(cursor.getColumnIndex(NOTE_COLUMN_ID)))
246 .setTitle(cursor.getString(cursor.getColumnIndex(NOTE_COLUMN_TITLE)))
247 .setvalue(cursor.getString(cursor.getColumnIndex(NOTE_COLUMN_VALUE)));
248 return note;
249}
250
251private SettingNote cursorToSettingNote(Cursor cursor) {
252 SettingNote Stnote = new SettingNote();
253 Stnote.setId(cursor.getInt(cursor.getColumnIndex(NOTE_COLUMN_ID)));
254 Stnote.setLang(cursor.getString(cursor.getColumnIndex(NOTE_SETTING_LANG)));
255 Stnote.setLoc(cursor.getString(cursor.getColumnIndex(NOTE_SETTING_LOC)));
256 Stnote.setSensitive(cursor.getString(cursor.getColumnIndex(NOTE_SETTING_SENS)));
257 return Stnote;
258}
259
260public long getProfilesCount(String databasename) {
261 SQLiteDatabase db = this.getReadableDatabase();
262 long cnt = DatabaseUtils.queryNumEntries(db, databasename);
263 db.close();
264 return cnt;
265}
266
267RadioButton mRGLangEng, mRGLangViet, mRGLocHN, mRGLocDN;
268CheckBox Sens;
269Locale myLocale;
270MySQLHelper sqlHelper;
271SettingNote stNote;
272Button Save;
273
274@Override
275public View onCreateView(LayoutInflater inflater, ViewGroup container,
276 Bundle savedInstanceState) {
277 View view = inflater.inflate(R.layout.view_setting, container, false);
278 Sens = (CheckBox) view.findViewById(R.id.SensCheck);
279 mRGLangEng = (RadioButton) view.findViewById(R.id.Lang_Eng);
280 mRGLangViet = (RadioButton) view.findViewById(R.id.Lang_Vie);
281 mRGLocHN = (RadioButton) view.findViewById(R.id.locHanoi);
282 mRGLocDN = (RadioButton) view.findViewById(R.id.locDanang);
283 Save = (Button) view.findViewById(R.id.save);
284 sqlHelper = new MySQLHelper(this.getActivity());
285 sqlHelper.getSettingNote(MySQLHelper.TABLE_SETTING_NAME);
286 if (stNote.getLang() == "en") {
287 mRGLangViet.setChecked(false);
288 mRGLangEng.setChecked(true);
289 } else {
290 mRGLangViet.setChecked(true);
291 mRGLangEng.setChecked(false);
292 }
293 if (stNote.getSensitive() == "no") {
294 Sens.setChecked(false);
295 Constants.USER_LIMITATION = 200;
296 } else {
297 Sens.setChecked(true);
298 Constants.USER_LIMITATION = 150;
299 }
300 if (stNote.getLang() == "hn") {
301 mRGLocHN.setChecked(true);
302 mRGLocDN.setChecked(false);
303 Constants.API_TYPE_AQI = 1; // Sensor's ID at HN_RDC
304 Constants.API_TYPE_TMP = 2;
305 Constants.API_TYPE_HUM = 3;
306
307 } else {
308 mRGLocHN.setChecked(false);
309 mRGLocDN.setChecked(true);
310 Constants.API_TYPE_AQI = 7;
311 Constants.API_TYPE_TMP = 8;
312 Constants.API_TYPE_HUM = 9;
313
314 }
315
316 mRGLocHN.setOnClickListener(new View.OnClickListener() {
317 @Override
318 public void onClick(View v) {
319 mRGLocDN.setChecked(false);
320 Constants.STR_LOC = "hn";
321 }
322 });
323
324 mRGLocDN.setOnClickListener(new View.OnClickListener() {
325 @Override
326 public void onClick(View v) {
327 mRGLocHN.setChecked(false);
328 Constants.STR_LOC = "dn";
329 }
330 });
331
332 mRGLangViet.setOnClickListener(new View.OnClickListener() {
333 @Override
334 public void onClick(View v) {
335 mRGLangEng.setChecked(false);
336 Constants.STR_LANG = "vi";
337 setLocale("vi");
338 }
339 });
340
341 mRGLangEng.setOnClickListener(new View.OnClickListener() {
342 @Override
343 public void onClick(View v) {
344 mRGLangViet.setChecked(false);
345 Constants.STR_LANG = "en";
346 setLocale("en");
347 }
348 });
349
350 Sens.setOnClickListener(new View.OnClickListener() {
351 @Override
352 public void onClick(View v) {
353 if (Sens.isChecked()){
354 Sens.setChecked(false);
355 Constants.STR_SENS = "no";
356 }else{
357 Sens.setChecked(true);
358 Constants.STR_SENS = "yes";
359 }
360 }
361 });
362
363 Save.setOnClickListener(new View.OnClickListener() {
364 @Override
365 public void onClick(View v) {
366 ContentValues cv = new ContentValues();
367 cv.put(MySQLHelper.NOTE_SETTING_LANG,Constants.STR_LANG);
368 cv.put(MySQLHelper.NOTE_SETTING_LOC, Constants.STR_LOC);
369 cv.put(MySQLHelper.NOTE_SETTING_SENS, Constants.STR_SENS);
370 sqlHelper.update(MySQLHelper.TABLE_SETTING_NAME,cv,"id = 1");
371 }
372 });
373
374
375 return view;
376}
377
378public void setLocale(String lang) {
379 myLocale = new Locale(lang);
380 Resources res = getResources();
381 DisplayMetrics dm = res.getDisplayMetrics();
382 Configuration conf = res.getConfiguration();
383 conf.locale = myLocale;
384 res.updateConfiguration(conf, dm);
385}
386
38711-10 21:54:14.487 2174-2174/com.journaldev.viewpager E/AndroidRuntime: FATAL EXCEPTION: main
388 Process: com.journaldev.viewpager, PID: 2174
389 android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
390 at android.database.AbstractCursor.checkPosition(AbstractCursor.java:426)
391 at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
392 at android.database.AbstractWindowedCursor.getInt(AbstractWindowedCursor.java:68)
393 at com.journaldev.viewpager.MyApplication.MyApp.MySQLHelper.cursorToSettingNote(MySQLHelper.java:270)
394 at com.journaldev.viewpager.MyApplication.MyApp.MySQLHelper.getSettingNote(MySQLHelper.java:191)
395 at com.journaldev.viewpager.MyApplication.MyApp.TabSetting.onCreateView(TabSetting.java:41)
396 at android.support.v4.app.Fragment.performCreateView(Fragment.java:1974)
397 at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)
398 at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1252)
399 at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:742)
400 at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617)
401 at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:570)
402 at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
403 at android.support.v4.view.ViewPager.populate(ViewPager.java:1177)
404 at android.support.v4.view.ViewPager.populate(ViewPager.java:1025)
405 at android.support.v4.view.ViewPager$3.run(ViewPager.java:254)
406 at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
407 at android.view.Choreographer.doCallbacks(Choreographer.java:580)
408 at android.view.Choreographer.doFrame(Choreographer.java:549)
409 at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
410 at android.os.Handler.handleCallback(Handler.java:739)
411 at android.os.Handler.dispatchMessage(Handler.java:95)
412 at android.os.Looper.loop(Looper.java:135)
413 at android.app.ActivityThread.main(ActivityThread.java:5221)
414 at java.lang.reflect.Method.invoke(Native Method)
415 at java.lang.reflect.Method.invoke(Method.java:372)
416 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
417 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)