Google Android - это несложно

Добро пожаловать на форум сайта startandroid.ru
Текущее время: 22 сен 2018, 20:25

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 762 ]  На страницу Пред.  1 ... 35, 36, 37, 38, 39  След.
Автор Сообщение
 Заголовок сообщения: Re: Урок 34. Хранение данных. SQLite
СообщениеДобавлено: 21 мар 2016, 03:13 

Зарегистрирован: 15 мар 2016, 03:10
Сообщений: 9
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Foenix писал(а):
сохраняй дату либо в формате 20160131
либо в виде лонга кол-во секунд с 71 года, кажется нужно Calendar использовать, не помню точно.
Мне удобнее первый формат, сразу видно какая дата, сортировать удобно и т.д. многие субд понимают этот фортмат как универсальный. А второй - когда дата содержит время, например, тайстемпы и т.д.

В таком формате разумеется сохраняет, потому что это не дата, а число.
А как ее потом показать юзеру в ListView при помощи SimpleCursorAdapter в нормальном человеческом виде? Пусть не прописью. Пусть в формате дд.мм.гггг


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 34. Хранение данных. SQLite
СообщениеДобавлено: 21 мар 2016, 08:33 

Зарегистрирован: 04 июн 2014, 10:21
Сообщений: 34
Благодарил (а): 4 раз.
Поблагодарили: 0 раз.
Всем доброго времени суток!
Товарищи, пожалуйста подскажите где я не прав, уже начинаю чувствовать себя идиотом...
Создаю базу данных, заполняю её, затем получаю список того, что запомнил и приложение вылетает с ошибкой:
Код: [ Загрузить ] [ Скрыть ]
  1. android.database.sqlite.SQLiteException: no such table: Sections (code 1): , while compiling: SELECT COUNT(*) AS Counter FROM `Sections` 


Создаётся и заполняется база данных так:
Код: [ Загрузить ] [ Скрыть ]
  1. public class DataBaseCore extends SQLiteOpenHelper { 
  2.  
  3.     private static final int DATABASE_VERSION = 1; 
  4.     private static final String DATABASE_NAME = "TestDB"; 
  5.  
  6.     public SQLiteDatabase DataBase; 
  7.  
  8.     public DataBaseCore(Context context) { 
  9.         super(context, DATABASE_NAME, null, DATABASE_VERSION); 
  10.         try { 
  11.             DataBase = this.getWritableDatabase(); 
  12.         } catch (SQLiteException ex){ 
  13.             DataBase = this.getReadableDatabase(); 
  14.         } 
  15.     } 
  16.  
  17.     @Override 
  18.     public void onCreate(SQLiteDatabase db) { 
  19.         String CREATE_DB = "CREATE TABLE `Desired` (`id` INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL , `goodid` INTEGER NOT NULL );" + 
  20.                 "CREATE TABLE `Goods` (`id` INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL , `VKGoodID` INTEGER NOT NULL , `CategoryID` INTEGER NOT NULL , `Title` VARCHAR(56) NOT NULL , `Description` TEXT, `Date` TimeStamp NOT NULL , `OwnerID` INTEGER NOT NULL , `Price` FLOAT NOT NULL  DEFAULT 0, `Currency` VARCHAR(5) NOT NULL , `Thumb` TEXT);" + 
  21.                 "CREATE TABLE `Sections` (`id` INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL , `SectionVKID` INTEGER NOT NULL , `Name` VARCHAR(24) NOT NULL );" + 
  22.                 "CREATE TABLE `categories` (`id` INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL , `VKCatID` INTEGER NOT NULL , `SectionID` INTEGER NOT NULL , `Name` VARCHAR(24) NOT NULL );" + 
  23.                 "CREATE TABLE `sellers` (`id` INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL  UNIQUE , `Name` VARCHAR(56) NOT NULL , `SellerVKID` INTEGER NOT NULL );"; 
  24.         db.execSQL(CREATE_DB); 
  25.     } 
  26.  
  27.     @Override 
  28.     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
  29.         db.execSQL("DROP TABLE IF EXISTS `Desired`;" + 
  30.                 "DROP TABLE IF EXISTS `Goods`;" + 
  31.                 "DROP TABLE IF EXISTS `Sections`;" + 
  32.                 "DROP TABLE IF EXISTS `categories`;" + 
  33.                 "DROP TABLE IF EXISTS `sellers`"); 
  34.         onCreate(db); 
  35.     } 
  36.  
  37.     public void categoriesUpdate() { 
  38.         //onUpgrade(DataBase, 1, 2); 
  39.         VKRequest request = new VKRequest("market.getCategories", VKParameters.from("count", 200)); 
  40.         request.executeWithListener(new VKRequest.VKRequestListener() { 
  41.             @Override 
  42.             public void onComplete(VKResponse response) { 
  43.                 try{ 
  44.                     //парсим список категорий 
  45.                     JSONObject jsonObject = new JSONObject(response.responseString); 
  46.                     JSONObject resp = jsonObject.getJSONObject("response"); 
  47.                     Category[] CatList = new Category[resp.getInt("count")]; 
  48.                     ArrayList<Category> Section = new ArrayList<Category>(); 
  49.                     JSONArray parray = resp.getJSONArray("items"); 
  50.                     int LastSectionID = -1; 
  51.  
  52.                     //Очищаем список категорий и подкатегорий 
  53.                     DataBase.execSQL("DELETE FROM `categories`"); // вообще крашится уже на этой строке с аналогичной ошибкой, но если эти две строки закомментировать, на инсерты не ругается вообще 
  54.                     DataBase.execSQL("DELETE FROM `Sections`"); 
  55.  
  56.                     Cursor cur = DataBase.rawQuery("select * from sqlite_master where type = 'table'", null); 
  57.                     cur.moveToFirst(); 
  58.                     while (cur.isAfterLast()){ 
  59.                         Log.w("TABLE NAME", cur.getString(0)); 
  60.                         cur.moveToNext(); 
  61.                     } 
  62.                     cur.close(); 
  63.                     for (int i = 0; i < parray.length(); i++) { //Заносим новые данные в таблицы 
  64.                         JSONObject tmp = parray.getJSONObject(i); 
  65.                         JSONObject tmp2 = tmp.getJSONObject("Section"); 
  66.  
  67.                         ContentValues newCatLine = new ContentValues(); 
  68.                         newCatLine.put("VKCatID", tmp.getInt("id")); 
  69.                         newCatLine.put("SectionID", tmp2.getInt("id")); 
  70.                         newCatLine.put("Name", tmp.getString("name")); 
  71.                         DataBase.insert("categories", null, newCatLine); 
  72.  
  73.                         if (LastSectionID!=tmp2.getInt("id")) { 
  74.                             ContentValues newValues = new ContentValues(); 
  75.                             newValues.put("SectionVKID", tmp2.getInt("id")); 
  76.                             newValues.put("Name", tmp2.getString("name")); 
  77.                             DataBase.insert("Sections", null, newValues); 
  78.                             LastSectionID = tmp2.getInt("id"); 
  79.                         } 
  80.                     } 
  81.  
  82.  
  83.                     //draw (ProductList); 
  84.                 } catch (JSONException e){ 
  85.                     Log.e("ERROR_VK_JSON", e.toString()); 
  86.                 } 
  87.             } 
  88.             @Override 
  89.             public void onError(VKError error) { 
  90.                 Log.e("ERROR_VK", error.toString()); 
  91.             } 
  92.             @Override 
  93.             public void attemptFailed(VKRequest request, int attemptNumber, int totalAttempts) { 
  94.                 Log.e("ERROR_VK", "Request is Failed"); 
  95.             } 
  96.         }); 
  97.     } 


Я очень надеюсь на любую подсказку!

Заранее всем большое спасибо!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 34. Хранение данных. SQLite
СообщениеДобавлено: 21 мар 2016, 13:17 

Зарегистрирован: 19 мар 2016, 22:51
Сообщений: 3
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Foenix писал(а):
at com.example.misha.fizmap10.main.onCreate(main.java:201)
а тут что?


Код: [ Загрузить ] [ Скрыть ]
  1. package com.example.misha.fizmap10; 
  2.  
  3. import android.app.AlertDialog; 
  4. import android.app.Dialog; 
  5. import android.app.ProgressDialog; 
  6. import android.content.ContentValues; 
  7. import android.content.Context; 
  8. import android.content.Intent; 
  9. import android.content.SharedPreferences; 
  10. import android.database.Cursor; 
  11. import android.database.sqlite.SQLiteDatabase; 
  12. import android.database.sqlite.SQLiteOpenHelper; 
  13. import android.os.AsyncTask; 
  14. import android.os.Bundle; 
  15. import android.support.v7.app.AppCompatActivity; 
  16. import android.view.Menu; 
  17. import android.view.MenuItem; 
  18. import android.view.View; 
  19. import android.widget.TextView; 
  20.  
  21. import com.example.misha.fizmap10.parser.JSONParser; 
  22.  
  23. import org.apache.http.NameValuePair; 
  24. import org.json.JSONArray; 
  25. import org.json.JSONObject; 
  26.  
  27. import java.util.ArrayList; 
  28. import java.util.Calendar; 
  29. import java.util.HashMap; 
  30. import java.util.List; 
  31. import java.util.Map; 
  32.  
  33.  
  34. public class main extends AppCompatActivity { 
  35.  
  36.     // Создаем JSON парсер 
  37.     JSONParser jParser = new JSONParser(); 
  38.  
  39.     private ProgressDialog pDialog; 
  40.  
  41.     // тут будет хранится список продуктов 
  42.     JSONArray para_array = null; 
  43.     // url отримання всіх пар 
  44.     public String url_all_products = "http://fizmat.kpnu.edu.ua/rozklad/get_all_products.php"; 
  45.  
  46.     // JSON Node names 
  47.     public final String TAG_SUCCESS = "success"; 
  48.     public final String TAG_GRUPP = "grupp"; 
  49.     public final String TAG_ID = "id"; 
  50.     public final String TAG_PREDMET = "predmet"; 
  51.     public final String TAG_VYKLADACH = "vykladach"; 
  52.     public final String TAG_TYPPARY = "typpary"; 
  53.     public final String TAG_DENJ = "denj"; 
  54.     public final String TAG_NOMERPARY = "nomerpary"; 
  55.     public final String TAG_AUDYTORIJA = "auditorija"; 
  56.     public final String TAG_PRODUCTS="products"; 
  57.     public final String TAG_CHYSELN="chyseln"; 
  58.     public final String TAG_PREDMET_K="predmet_k"; 
  59.  
  60.  
  61.  
  62.  
  63.     public String test = ""; 
  64.     TextView textView_privet, text_Viev_chyselnyk; 
  65.     final int KEY_EKRAN = 1; 
  66.     public final String TABLE_BAZE = "table_fizmat"; 
  67.     final int DIALOG = 1; 
  68.  
  69.     DBHelper baze; 
  70.     TextView[][] text_rozklad = new TextView[7][8]; 
  71.     PARA[][] para = new PARA[7][8]; 
  72.     PARA[][] para_n = new PARA[7][8]; 
  73.     SharedPreferences Spref; 
  74.     String priwet, umova = "vykladach=?", parametr_s, name_login, grup_login, text_null; 
  75.  
  76.  
  77.     int CHYSELN, CHYSELN_N; 
  78.  
  79.     @Override 
  80.     protected void onCreate(Bundle savedInstanceState) { 
  81.         super.onCreate(savedInstanceState); 
  82.         setContentView(R.layout.activity_main); 
  83.  
  84.  
  85.  
  86.         //перевіряємо авторизацію і авторизовуємося 
  87.         Spref = getSharedPreferences("login", MODE_PRIVATE); 
  88.         name_login = Spref.getString("nameLogin", ""); 
  89.         grup_login = Spref.getString("grupLogin", ""); 
  90.         String start_s=Spref.getString("Start", ""); 
  91.  
  92.         if(start_s=="") { 
  93.             Intent intent_about = new Intent(main.this, about.class); 
  94.             startActivity(intent_about); 
  95.         } 
  96.  
  97.         textView_privet = (TextView) findViewById(R.id.textView_privet); 
  98.         text_Viev_chyselnyk=(TextView)findViewById(R.id.textView_chyselnyk); 
  99.  
  100.         if (name_login != "") { 
  101.             priwet = "Розклад для викладача: " + name_login; 
  102.             //задаємо умову пошуку в базі 
  103.             umova = "vykladach=?"; 
  104.             //список параметрів співпадінь 
  105.  
  106.             parametr_s = name_login; 
  107.         } 
  108.  
  109.         if (grup_login != "") { 
  110.             priwet = "Розклад для групи: " + grup_login; 
  111.             //задаємо умову пошуку в базі 
  112.             umova = "grupp=?"; 
  113.             //список параметрів співпадінь 
  114.             parametr_s = grup_login; 
  115.         } 
  116.  
  117.  
  118.         if (name_login == "" && grup_login == "") { 
  119.             Intent intent = new Intent(main.this, login.class); 
  120.             startActivity(intent); 
  121.         } 
  122.  
  123.  
  124.  
  125.         //захоплюємо текстові поля для розкладу 
  126.         text_rozklad[1][1] = (TextView) findViewById(R.id.textView11); 
  127.         text_rozklad[1][2] = (TextView) findViewById(R.id.textView12); 
  128.         text_rozklad[1][3] = (TextView) findViewById(R.id.textView13); 
  129.         text_rozklad[1][4] = (TextView) findViewById(R.id.textView14); 
  130.         text_rozklad[1][5] = (TextView) findViewById(R.id.textView15); 
  131.         text_rozklad[2][1] = (TextView) findViewById(R.id.textView21); 
  132.         text_rozklad[2][2] = (TextView) findViewById(R.id.textView22); 
  133.         text_rozklad[2][3] = (TextView) findViewById(R.id.textView23); 
  134.         text_rozklad[2][4] = (TextView) findViewById(R.id.textView24); 
  135.         text_rozklad[2][5] = (TextView) findViewById(R.id.textView25); 
  136.         text_rozklad[3][1] = (TextView) findViewById(R.id.textView31); 
  137.         text_rozklad[3][2] = (TextView) findViewById(R.id.textView32); 
  138.         text_rozklad[3][3] = (TextView) findViewById(R.id.textView33); 
  139.         text_rozklad[3][4] = (TextView) findViewById(R.id.textView34); 
  140.         text_rozklad[3][5] = (TextView) findViewById(R.id.textView35); 
  141.         text_rozklad[4][1] = (TextView) findViewById(R.id.textView41); 
  142.         text_rozklad[4][2] = (TextView) findViewById(R.id.textView42); 
  143.         text_rozklad[4][3] = (TextView) findViewById(R.id.textView43); 
  144.         text_rozklad[4][4] = (TextView) findViewById(R.id.textView44); 
  145.         text_rozklad[4][5] = (TextView) findViewById(R.id.textView45); 
  146.         text_rozklad[5][1] = (TextView) findViewById(R.id.textView51); 
  147.         text_rozklad[5][2] = (TextView) findViewById(R.id.textView52); 
  148.         text_rozklad[5][3] = (TextView) findViewById(R.id.textView53); 
  149.         text_rozklad[5][4] = (TextView) findViewById(R.id.textView54); 
  150.         text_rozklad[5][5] = (TextView) findViewById(R.id.textView55); 
  151.         text_rozklad[6][1] = (TextView) findViewById(R.id.textView61); 
  152.         text_rozklad[6][2] = (TextView) findViewById(R.id.textView62); 
  153.         text_rozklad[6][3] = (TextView) findViewById(R.id.textView63); 
  154.         text_rozklad[6][4] = (TextView) findViewById(R.id.textView64); 
  155.         text_rozklad[6][5] = (TextView) findViewById(R.id.textView65); 
  156.  
  157.         baze = new DBHelper(this); 
  158.         //  скачуємо з бази 
  159.         SQLiteDatabase db = baze.getWritableDatabase(); 
  160.  
  161.  
  162.  
  163.         //зчитування початку семестру 
  164.         Cursor cursor_d = db.query(TABLE_BAZE, null, "grupp=?", new String[]{"datasetup"}, null, null, null); 
  165.         // определяем номера столбцов по имени в выборке 
  166.         int id_rik_start = cursor_d.getColumnIndex("typpary"); 
  167.         int id_misjac_start = cursor_d.getColumnIndex("denj"); 
  168.         int id_chislo_start = cursor_d.getColumnIndex("nomerpary"); 
  169.         int id_chys = cursor_d.getColumnIndex("chyseln"); 
  170.  
  171.         int rik_start=2013; 
  172.         int misjac_start=0; 
  173.         int chislo_start=0; 
  174.  
  175.         while (cursor_d.moveToNext()) { 
  176.              rik_start = Integer.parseInt(cursor_d.getString(id_rik_start)); 
  177.              misjac_start = Integer.parseInt(cursor_d.getString(id_misjac_start)); 
  178.              chislo_start = Integer.parseInt(cursor_d.getString(id_chislo_start)); 
  179.  
  180.         } 
  181.  
  182.  
  183.  
  184.  
  185.         Calendar thatDay = Calendar.getInstance(); 
  186.         thatDay.set(Calendar.DAY_OF_MONTH, chislo_start); 
  187.         thatDay.set(Calendar.MONTH, misjac_start); // 0-11 на 1 меньше нумерація місяців з 0 
  188.         thatDay.set(Calendar.YEAR, rik_start); 
  189.  
  190.         Calendar today = Calendar.getInstance(); 
  191.  
  192.         long diff = today.getTimeInMillis() - thatDay.getTimeInMillis(); //result in millis 
  193.  
  194.         long rizn = diff / (1000 * 3600 * 24*7)+1; 
  195.  
  196.         if ((int)rizn%2==1){CHYSELN=2; CHYSELN_N=3; text_Viev_chyselnyk.setText("Діє чисельник"); text_null="Знаменник";} else {CHYSELN=3;  CHYSELN_N=2; text_Viev_chyselnyk.setText("Діє знаменник");text_null="Чисельник";} 
  197.  
  198.  
  199.  
  200.  
  201.         Cursor cursor = db.query(TABLE_BAZE, null, umova, new String[]{parametr_s}, null, null, null); 
  202.  
  203.         // определяем номера столбцов по имени в выборке 
  204.         int id_predmet = cursor.getColumnIndex(TAG_PREDMET); 
  205.         int id_grupp = cursor.getColumnIndex(TAG_GRUPP); 
  206.         int id_vykladach = cursor.getColumnIndex(TAG_VYKLADACH); 
  207.         int id_typpary = cursor.getColumnIndex(TAG_TYPPARY); 
  208.         int id_denj = cursor.getColumnIndex(TAG_DENJ); 
  209.         int id_nomerpary = cursor.getColumnIndex(TAG_NOMERPARY); 
  210.         int id_auditorija = cursor.getColumnIndex(TAG_AUDYTORIJA); 
  211.         int id_chyseln = cursor.getColumnIndex(TAG_CHYSELN); 
  212.         int id_predmet_k = cursor.getColumnIndex(TAG_PREDMET_K); 
  213.  
  214.  
  215.  
  216.  
  217.  
  218.         while (cursor.moveToNext()) { 
  219.  
  220.             //отримуємо необхідні дані для пари 
  221.             int chyseln = Integer.parseInt(cursor.getString(id_chyseln)); 
  222.  
  223.             if (chyseln == CHYSELN || chyseln == 1){ 
  224.                 String predmet = cursor.getString(id_predmet); 
  225.                 String grupp = cursor.getString(id_grupp); 
  226.                 String vykladach = cursor.getString(id_vykladach); 
  227.                 int typpary = Integer.parseInt(cursor.getString(id_typpary)); 
  228.                 int denj = Integer.parseInt(cursor.getString(id_denj)); 
  229.                 int nomerpary = Integer.parseInt(cursor.getString(id_nomerpary)); 
  230.                 String auditorija = cursor.getString(id_auditorija); 
  231.                 String predmet_k = cursor.getString(id_predmet_k); 
  232.  
  233.                 //створюємо обєкт пара, або добавляємо викладача 
  234.                 if (para[nomerpary][denj]==null){ para[nomerpary][denj] = new PARA(predmet, grupp, vykladach, typpary, denj, nomerpary, auditorija, chyseln, predmet_k);} 
  235.                 else {para[nomerpary][denj].add_vykladach(vykladach, auditorija);} 
  236.  
  237.                 // заповнюємо відповідне текстове поле 
  238.                 TextView text_tmp = text_rozklad[nomerpary][denj]; 
  239.                 String sT = predmet_k + "\n" + auditorija; 
  240.                 text_tmp.setText(sT); 
  241.                 switch (typpary) { 
  242.                     case 1: 
  243.                         text_tmp.setBackgroundColor(getResources().getColor(R.color.lekcii_color)); 
  244.                         break; 
  245.                     case 2: 
  246.                         text_tmp.setBackgroundColor(getResources().getColor(R.color.praktychna_color)); 
  247.                         break; 
  248.                     case 3: 
  249.                         text_tmp.setBackgroundColor(getResources().getColor(R.color.laboratorni_color)); 
  250.                         break; 
  251.                 } 
  252.             } 
  253.  
  254.  
  255.  
  256.             if (chyseln == CHYSELN_N || chyseln == 1){ 
  257.                 String predmet = cursor.getString(id_predmet); 
  258.                 String grupp = cursor.getString(id_grupp); 
  259.                 String vykladach = cursor.getString(id_vykladach); 
  260.                 int typpary = Integer.parseInt(cursor.getString(id_typpary)); 
  261.                 int denj = Integer.parseInt(cursor.getString(id_denj)); 
  262.                 int nomerpary = Integer.parseInt(cursor.getString(id_nomerpary)); 
  263.                 String auditorija = cursor.getString(id_auditorija); 
  264.                 String predmet_k = cursor.getString(id_predmet_k); 
  265.  
  266.                 //створюємо обєкт пара, або добавляємо викладача 
  267.                 if (para_n[nomerpary][denj]==null){ para_n[nomerpary][denj] = new PARA(predmet, grupp, vykladach, typpary, denj, nomerpary, auditorija, chyseln, predmet_k);} 
  268.                 else {para_n[nomerpary][denj].add_vykladach(vykladach, auditorija);} 
  269.  
  270.                 if (text_rozklad[nomerpary][denj].getText().toString()=="") { 
  271.                     text_rozklad[nomerpary][denj].setBackgroundColor(getResources().getColor(R.color.pusto_color)); 
  272.                     text_rozklad[nomerpary][denj].setText(text_null); 
  273.  
  274.                 } 
  275.  
  276.             } 
  277.  
  278.  
  279.         } 
  280.  
  281.  
  282.         textView_privet.setText(priwet); 
  283.     } 
  284.  


На HTC удалось запустить по таком алгоритме: закоментировал работу с базой -- запустилось.
Розкоментировал и о-чудо заработало. До того постоянно одну и туж ошибку в лог писало. Но понятно что такая последовательность не вариант.

если конкретно про 201 строчку то тут
Cursor cursor = db.query(TABLE_BAZE, null, umova, new String[]{parametr_s}, null, null, null);


Последний раз редактировалось mishaberces 23 мар 2016, 08:54, всего редактировалось 3 раз(а).

Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 34. Хранение данных. SQLite
СообщениеДобавлено: 21 мар 2016, 22:31 

Зарегистрирован: 04 июн 2014, 10:21
Сообщений: 34
Благодарил (а): 4 раз.
Поблагодарили: 0 раз.
В общем сам нашёл ответ...
Если кому интересно: Эта хренотень не поддерживает выполнение сразу нескольких запросов в одной команде. Разбил отдельно создание каждой таблицы и всё стало хорошо.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 34. Хранение данных. SQLite
СообщениеДобавлено: 23 мар 2016, 09:52 

Зарегистрирован: 19 мар 2016, 22:51
Сообщений: 3
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Foenix писал(а):
at com.example.misha.fizmap10.main.onCreate(main.java:201)
а тут что?

Спасибо за подсказку. Разобрался.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 34. Хранение данных. SQLite
СообщениеДобавлено: 23 мар 2016, 11:53 
Аватар пользователя

Зарегистрирован: 20 окт 2012, 12:01
Сообщений: 4201
Благодарил (а): 68 раз.
Поблагодарили: 467 раз.
Кошки Рулят писал(а):
Foenix писал(а):
сохраняй дату либо в формате 20160131
либо в виде лонга кол-во секунд с 71 года, кажется нужно Calendar использовать, не помню точно.
Мне удобнее первый формат, сразу видно какая дата, сортировать удобно и т.д. многие субд понимают этот фортмат как универсальный. А второй - когда дата содержит время, например, тайстемпы и т.д.

В таком формате разумеется сохраняет, потому что это не дата, а число.
А как ее потом показать юзеру в ListView при помощи SimpleCursorAdapter в нормальном человеческом виде? Пусть не прописью. Пусть в формате дд.мм.гггг

при помощи класса Calendar
либо SimpleDateFormat formatter = new SimpleDateFormat("dd.MM.yyyy HH:mm", Locale.getDefault());
в адаптере списка, например, переопределяя метод getView()

_________________
R.id.team

NullPointerException - что делать???
http://forum.startandroid.ru/viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
http://forum.startandroid.ru/viewtopic.php?f=60&t=3198


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 34. Хранение данных. SQLite
СообщениеДобавлено: 26 мар 2016, 02:03 

Зарегистрирован: 15 мар 2016, 03:10
Сообщений: 9
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Foenix писал(а):
Кошки Рулят писал(а):
Foenix писал(а):
сохраняй дату либо в формате 20160131
либо в виде лонга кол-во секунд с 71 года, кажется нужно Calendar использовать, не помню точно.
Мне удобнее первый формат, сразу видно какая дата, сортировать удобно и т.д. многие субд понимают этот фортмат как универсальный. А второй - когда дата содержит время, например, тайстемпы и т.д.

В таком формате разумеется сохраняет, потому что это не дата, а число.
А как ее потом показать юзеру в ListView при помощи SimpleCursorAdapter в нормальном человеческом виде? Пусть не прописью. Пусть в формате дд.мм.гггг

при помощи класса Calendar
либо SimpleDateFormat formatter = new SimpleDateFormat("dd.MM.yyyy HH:mm", Locale.getDefault());
в адаптере списка, например, переопределяя метод getView()


Все проще
Текстовое поле надо получать из базы не как в уроках
cursor.getInt(DataDocIndex),
а
cursor.getString(DataDocIndex)
этот метод вернет строку как она записана в таблице и не станет приводить ее к числу ...


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 34. Хранение данных. SQLite
СообщениеДобавлено: 28 мар 2016, 20:15 
Аватар пользователя

Зарегистрирован: 20 окт 2012, 12:01
Сообщений: 4201
Благодарил (а): 68 раз.
Поблагодарили: 467 раз.
тебе надо в формат переводить, я и ответила на этот вопрос. А то что это число или строка в данном случае почти не важно.

_________________
R.id.team

NullPointerException - что делать???
http://forum.startandroid.ru/viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
http://forum.startandroid.ru/viewtopic.php?f=60&t=3198


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 34. Хранение данных. SQLite
СообщениеДобавлено: 12 май 2016, 12:25 

Зарегистрирован: 12 май 2016, 12:14
Сообщений: 2
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Подскажите пожалуйста. Если я не собираюсь расшаривать данные своего приложения, то стоит использовать БД напрямую или все же использовать ContentProvider + SQLite? Если буду использовать БД без провайдера, то потеряю какие-нибудь плюсы от связки ContentProvider + SQLite?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 34. Хранение данных. SQLite
СообщениеДобавлено: 12 май 2016, 12:44 
Аватар пользователя

Зарегистрирован: 20 окт 2012, 12:01
Сообщений: 4201
Благодарил (а): 68 раз.
Поблагодарили: 467 раз.
да, надо делать. Ничего страшного там нет. Даже генераторы КП уже придумали.
Например, когда ты захочешь сделать списки с лоадерами - то не сможешь воспользоваться их полной мощью так сказать, посколько с помощью К.П, происходит автоматическое уведомление об изменениях в бд где бы то ни было.

_________________
R.id.team

NullPointerException - что делать???
http://forum.startandroid.ru/viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
http://forum.startandroid.ru/viewtopic.php?f=60&t=3198


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 34. Хранение данных. SQLite
СообщениеДобавлено: 13 май 2016, 12:27 

Зарегистрирован: 12 май 2016, 12:14
Сообщений: 2
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Ясно, то есть от провайдеров только плюсы. Спасибо за помощь!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 34. Хранение данных. SQLite
СообщениеДобавлено: 21 май 2016, 21:06 

Зарегистрирован: 21 май 2016, 20:45
Сообщений: 1
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Код: [ Загрузить ] [ Скрыть ]
  1. import android.content.ContentValues; 
  2. import android.database.Cursor; 
  3. import android.database.sqlite.SQLiteDatabase; 
  4. import android.support.v7.app.AppCompatActivity; 
  5. import android.os.Bundle; 
  6. import android.util.Log; 
  7. import android.view.View; 
  8. import android.widget.Button; 
  9. import android.widget.EditText; 
  10. import android.widget.Toast; 
  11.  
  12. public class MainActivity extends AppCompatActivity implements View.OnClickListener{ 
  13.  
  14.     EditText editName, editMail; 
  15.     Button btnAdd, btnRead, btnClear; 
  16.     DBHelper dbHelper; 
  17.  
  18.     @Override 
  19.     protected void onCreate(Bundle savedInstanceState) { 
  20.         super.onCreate(savedInstanceState); 
  21.         setContentView(R.layout.activity_main); 
  22.  
  23.         editMail = (EditText)findViewById(R.id.editMail); 
  24.         editName = (EditText)findViewById(R.id.editName); 
  25.  
  26.         btnAdd = (Button)findViewById(R.id.btnAdd); 
  27.         btnRead = (Button)findViewById(R.id.btnRead); 
  28.         btnClear = (Button)findViewById(R.id.btnClear); 
  29.  
  30.         btnAdd.setOnClickListener(this); 
  31.         btnRead.setOnClickListener(this); 
  32.         btnClear.setOnClickListener(this); 
  33.  
  34.         dbHelper = new DBHelper(this); 
  35.     } 
  36.  
  37.     @Override 
  38.     public void onClick(View v) { 
  39.         ContentValues contentValues = new ContentValues(); 
  40.         String name = editName.getText().toString(); 
  41.         String mail = editMail.getText().toString(); 
  42.         SQLiteDatabase database = dbHelper.getWritableDatabase(); 
  43.  
  44.         switch (v.getId()){ 
  45.             case R.id.btnAdd: 
  46.                 contentValues.put("name", name); 
  47.                 contentValues.put("mail", mail); 
  48.                 database.insert("Contacts", null, contentValues); 
  49.                 Log.d("myLogg", "Строка вставлена"); 
  50.                 break; 
  51.             case R.id.btnRead: 
  52.                 Cursor cursor = database.query("Contacts", null,null,null,null,null,null); 
  53.                 if(cursor.moveToFirst()){ 
  54.                     int idIndex = cursor.getColumnIndex("id"); 
  55.                     int nameIndex = cursor.getColumnIndex("name"); 
  56.                     int mailIndex = cursor.getColumnIndex("mail"); 
  57.  
  58.                     do{ 
  59.                         Log.d("myLogg", "ID = " + cursor.getInt(idIndex) + 
  60.                         " Name = " + cursor.getString(nameIndex) + " Email = " + cursor.getString(mailIndex)); 
  61.                     } while (cursor.moveToNext()); 
  62.                 } else Log.d("myLogg", "0 rows inserted"); 
  63.                 cursor.close(); 
  64.                 break; 
  65.             case R.id.btnClear: 
  66.                 database.delete("Contacts", null, null); 
  67.                 Toast.makeText(MainActivity.this, "База удалена", Toast.LENGTH_SHORT).show(); 
  68.                 break; 
  69.         } 
  70.         dbHelper.close(); 
  71.     } 


Код: [ Загрузить ] [ Скрыть ]
  1. import android.content.Context; 
  2. import android.database.sqlite.SQLiteDatabase; 
  3. import android.database.sqlite.SQLiteOpenHelper; 
  4.  
  5. public class DBHelper extends SQLiteOpenHelper{ 
  6.  
  7.     public static final int DATABASE_VERSION = 1; 
  8.     public static final String DATABASE_NAME = "MyDatabase"; 
  9.     public static final String TABLE_NAME = "contacts"; 
  10.  
  11.     public static final String KEY_ID = "_id"; 
  12.     public static final String KEY_NAME = " name"; 
  13.     public static final String KEY_MAIL = "mail"; 
  14.  
  15.     public DBHelper(Context context) { 
  16.         super(context, DATABASE_NAME, null, DATABASE_VERSION); 
  17.     } 
  18.  
  19.     @Override 
  20.     public void onCreate(SQLiteDatabase db) { 
  21.         db.execSQL("create table " + TABLE_NAME + "(" + KEY_ID + " integer primary key autoincrement, " + KEY_NAME + " text, " + KEY_MAIL + " text" + ")"); 
  22.     } 
  23.  
  24.     @Override 
  25.     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
  26.         db.execSQL("drop table if exists " + TABLE_NAME); 
  27.     } 


Уже два дня бьюсь с этим уроком
Не создается столбец name, в чем проблема?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 34. Хранение данных. SQLite
СообщениеДобавлено: 21 май 2016, 22:02 
Аватар пользователя

Зарегистрирован: 20 окт 2012, 12:01
Сообщений: 4201
Благодарил (а): 68 раз.
Поблагодарили: 467 раз.
Версию поменяй, если ты менял структуру, и в onUpgrade создавать таблицу надо, а не только дропать.

_________________
R.id.team

NullPointerException - что делать???
http://forum.startandroid.ru/viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
http://forum.startandroid.ru/viewtopic.php?f=60&t=3198


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 34. Хранение данных. SQLite
СообщениеДобавлено: 22 май 2016, 12:20 

Зарегистрирован: 10 мар 2016, 15:20
Сообщений: 5
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Как можно обновить курсорлоадер из диалога?
На событие Dismiss() диалога, добавляется запись в БД, но лоадер не обновляется
getLoaderManager().getLoader(0).forceLoad();


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 34. Хранение данных. SQLite
СообщениеДобавлено: 22 май 2016, 13:38 
Аватар пользователя

Зарегистрирован: 20 окт 2012, 12:01
Сообщений: 4201
Благодарил (а): 68 раз.
Поблагодарили: 467 раз.
Не нужно из диалога ни в коем случае это делать. В контент провайдере нужно посылать нотифай и все обновится само.

_________________
R.id.team

NullPointerException - что делать???
http://forum.startandroid.ru/viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
http://forum.startandroid.ru/viewtopic.php?f=60&t=3198


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 34. Хранение данных. SQLite
СообщениеДобавлено: 11 июл 2016, 13:48 

Зарегистрирован: 30 сен 2015, 10:52
Сообщений: 2
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
anapel писал(а):
Подскажите как можно просмотреть БД созданную моим приложением ? в /data/..... попасть не могу говорит нет доступа

Случайно обнаружил ответ на свой старый вопрос.
На не рутованном телефоне БД можно просмотреть на компе сделав бекап своего приложения при помощи adb.

выводим список установленных приложений и находим свое(my_packages)
adb.exe shell pm list packages

делаем бекап своего приложения
adb backup -f my_packages_backup_name my_packages

при помощи abe(android backup extractor) распаковываем бекап своего приложения
java -jar abe.jar unpack my_packages_backup_name my_packages_backup_name.tar

В результате получаем обычный архив my_packages_backup_name.tar внутри которого есть файл db, который открывается любым SQLlight вьюером.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 34. Хранение данных. SQLite
СообщениеДобавлено: 10 авг 2016, 15:31 

Зарегистрирован: 10 авг 2016, 15:06
Сообщений: 1
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Здравствуйте, подскажите пожалуйста Как лучше организовать структуру БД, для работы с большими массивами данных, одного типа, например разных независимых картотек, чтоб пользователю можно было переключаться между ними, создавать новые и удалять ненужные (картотеки):
так вот, лучше организовать их - базами и создавать несколько разных баз, работать в определенный момент с нужной, которые станут ненужны - удалить.
Или использовать в одной базе много таблиц и их добавлять/удалять.
Или это одинаково по скорости работы / надежности.
Спасибо!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 34. Хранение данных. SQLite
СообщениеДобавлено: 19 дек 2016, 20:10 
Аватар пользователя

Зарегистрирован: 15 дек 2016, 14:57
Сообщений: 13
Откуда: Volgograd
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Ребят, такой вопрос.
Я почти никогда не занимался программированием, в универе немного C# учил, потом немного увлекался разработкой небольших игрушек на Unity, для скриптинга использовал тот же C#, то есть Java для меня не в новинку, скажем так :)

Все предыдущие уроки были по сути элементарны, теперь я их с легкостью повторю без каких-либо подсказок, с закрытыми глазами. :)
А вот этот урок.. Да, я в принципе понял всё, что я писал, ибо всё закомменчено + описаны сами уроки очень здорово и подробно. Но скажу честно - я это точно не повторю самостоятельно. Никогда не работал с SQL, впервые сталкиваюсь. Скажите, что еще почитать можно, чтобы получше разобраться? Чтобы можно было самому это писать, а не просто понимать написанное? Достаточно разве просто последующих уроков? Думаю, нет.
Спасибо )


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 34. Хранение данных. SQLite
СообщениеДобавлено: 24 апр 2017, 11:30 

Зарегистрирован: 24 апр 2017, 11:26
Сообщений: 1
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
А что будет с базой после удаления приложения. Как я понимаю, она останется и при удалении приложения ее нужно как то удалять.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 34. Хранение данных. SQLite
СообщениеДобавлено: 23 май 2017, 20:49 

Зарегистрирован: 23 дек 2016, 07:52
Сообщений: 7
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
BirviZ писал(а):
А что будет с базой после удаления приложения. Как я понимаю, она останется и при удалении приложения ее нужно как то удалять.

При удалении приложения sqlite-база данных удаляется вместе с ним , также можно вручную удалить данные приложения в настройках устройства


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 762 ]  На страницу Пред.  1 ... 35, 36, 37, 38, 39  След.

Часовой пояс: UTC + 3 часа


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB