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

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

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




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

Зарегистрирован: 03 июн 2015, 12:53
Сообщений: 1
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Всем привет, нужна помощь
SQLite связь один-ко-многим
не могу понять как реализовать и использовать ( прописать пример SELECT ) или как добавить 2-3-4 DB_TABLE в C_IDTASK
заранее спасибо (вопрос есть и в группе ВК fanDROID.info кому как удобнее ответить :D )

структуру я понимаю а как реализовать не могу найти

private static final String DB_CREATE =
"create table " + DB_TABLE + " ("
+ C_ID + " integer primary key autoincrement, " +
C_NAME + " text, " +
C_AWARD + " int, " +
C_DONE + " int" + ");";

private static final String DB_CREATE2 =
"create table " + DB_TABLE2 + " ("
+ C_IDAKK + " integer primary key autoincrement, " +
C_LOGIN + " text, " +
C_EMAIL + " int, " +
C_PASSWORD + " text, " +
C_COINS + " int, " +
C_IDTASK + " int, " +
"FOREIGN KEY(" + C_IDTASK + ") REFERENCES " + DB_TABLE +"(" + C_ID + ")"+ ");";


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

Зарегистрирован: 09 июн 2015, 10:02
Сообщений: 7
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.
Ребята привет!
Вопрос немного не стандартный, из серии "Не работало, починил, но не понял почему заработало"=)

Повторял код урока, без копипаста, "ручками", и на выходе, при попытке прочитать что либо из базы данных получал ошибку "SQLiteException: no such table: mytable: ".
После 10 раза перепроверки заметил единственное отличие кода урока от своего. В конструкторе суперкласса DBHelper отличие в одной букве:
Мой код:
Код: [ Загрузить ] [ Скрыть ]
  1. super(context,"myDb", null, 1 ); 

Хозяйский код:
Код: [ Загрузить ] [ Скрыть ]
  1. super(context,"myDB", null, 1 ); 


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

На всякий случай - вот полный код:
Код: [ Загрузить ] [ Скрыть ]
  1. package com.dosssik.andrey.sqlsample; 
  2.  
  3. import android.app.Activity; 
  4. import android.content.ContentValues; 
  5. import android.content.Context; 
  6. import android.database.Cursor; 
  7. import android.database.sqlite.SQLiteDatabase; 
  8. import android.database.sqlite.SQLiteOpenHelper; 
  9. import android.os.Bundle; 
  10. import android.util.Log; 
  11. import android.view.Menu; 
  12. import android.view.MenuItem; 
  13. import android.view.View; 
  14. import android.widget.Button; 
  15. import android.widget.EditText; 
  16. import android.widget.Toast; 
  17.  
  18.  
  19. public class MainActivity extends Activity implements View.OnClickListener { 
  20.  
  21.     /*private static final String DATABASE_NAME = "database.db"; 
  22.     private static final String DATABASE_TABLE = "mainTable"; 
  23.     private static final String DATABASE_CREATE = "create table " + DATABASE_TABLE 
  24.             + "( id integer primary key autoincrement, " + "column_one not null);"; 
  25.     SQLiteDatabase myDb;*/ 
  26.  
  27.     final String LOG_TAG = "myLogs"; 
  28.  
  29.     Button btnRead, btnAdd, btnClear; 
  30.     EditText edName, edMail; 
  31.     DBHelper dbHelper; 
  32.  
  33.     @Override 
  34.     protected void onCreate(Bundle savedInstanceState) { 
  35.         super.onCreate(savedInstanceState); 
  36.         setContentView(R.layout.activity_main); 
  37.  
  38.         btnAdd = (Button) findViewById(R.id.add_btn); 
  39.         btnAdd.setOnClickListener(this); 
  40.         btnRead = (Button) findViewById(R.id.read_btn); 
  41.         btnRead.setOnClickListener(this); 
  42.         btnClear = (Button) findViewById(R.id.clear_btn); 
  43.         btnClear.setOnClickListener(this); 
  44.  
  45.         edMail = (EditText) findViewById(R.id.ed_mail); 
  46.         edName = (EditText) findViewById(R.id.ed_name); 
  47.  
  48.         dbHelper = new DBHelper(this); 
  49.     } 
  50.  
  51.     @Override 
  52.     public boolean onCreateOptionsMenu(Menu menu) { 
  53.         // Inflate the menu; this adds items to the action bar if it is present. 
  54.         getMenuInflater().inflate(R.menu.menu_main, menu); 
  55.         return true; 
  56.     } 
  57.  
  58.     @Override 
  59.     public boolean onOptionsItemSelected(MenuItem item) { 
  60.         // Handle action bar item clicks here. The action bar will 
  61.         // automatically handle clicks on the Home/Up button, so long 
  62.         // as you specify a parent activity in AndroidManifest.xml. 
  63.         int id = item.getItemId(); 
  64.  
  65.         //noinspection SimplifiableIfStatement 
  66.         if (id == R.id.action_settings) { 
  67.             return true; 
  68.         } 
  69.  
  70.         return super.onOptionsItemSelected(item); 
  71.     } 
  72.  
  73.     @Override 
  74.     public void onClick(View view) { 
  75.  
  76.         // Шта это? 
  77.         ContentValues cv = new ContentValues(); 
  78.  
  79.         String name = edName.getText().toString(); 
  80.         String email = edMail.getText().toString(); 
  81.  
  82.         // Подключение к ДБ 
  83.         SQLiteDatabase db = dbHelper.getWritableDatabase(); 
  84.  
  85.         switch (view.getId()) { 
  86.             case R.id.add_btn: 
  87.                 Log.d(LOG_TAG, "--- insert into myTable ---"); 
  88.                 // Подготавливаем данные, приводим к виду ключ-значение 
  89.                 cv.put("name", name); 
  90.                 cv.put("email", email); 
  91.                 // Вставляем запись, и получаем ее ID 
  92.                 long rowId = db.insert("mytable", null, cv); 
  93.                 Log.d(LOG_TAG, "Row inserted, ID = " + rowId); 
  94.                 break; 
  95.  
  96.             case R.id.read_btn: 
  97.                 Log.d(LOG_TAG, "--- Rows in mytable: ---"); 
  98.                 Cursor c = db.query("mytable", null, null, null, null, null, null); 
  99.  
  100.                 if(c.moveToFirst()) { 
  101.                     int idColIndex = c.getColumnIndex("id"); 
  102.                     int nameColIndex = c.getColumnIndex("name"); 
  103.                     int emailColIndex = c.getColumnIndex("email"); 
  104.  
  105.                     do { 
  106.                         Log.d(LOG_TAG, "Id = " + c.getInt(idColIndex) + 
  107.                                 ", name = " + c.getString(nameColIndex) + ", email = " + c.getString(emailColIndex)); 
  108.                     } while (c.moveToNext()); 
  109.  
  110.                 } else Log.d(LOG_TAG, "0 rows"); 
  111.                 c.close(); 
  112.                 break; 
  113.             case R.id.clear_btn: 
  114.                 Log.d(LOG_TAG, ("--- Clear mytable ---")); 
  115.                 int cleatCount = db.delete("mytable", null, null); 
  116.                 Log.d(LOG_TAG, ("--- i killed everything ---")); 
  117.                 break; 
  118.  
  119.         } 
  120.         dbHelper.close(); 
  121.     } 
  122.  
  123.     class DBHelper extends SQLiteOpenHelper { 
  124.  
  125.         public DBHelper (Context context) { 
  126.             super(context,"myDb", null, 1 ); 
  127.         } 
  128.  
  129.         @Override 
  130.         public void onCreate(SQLiteDatabase db) { 
  131.             Log.d(LOG_TAG, "--- onCreate db ---"); 
  132.             db.execSQL("create table mytable (" + "id integer primary key autoincrement," 
  133.                     + "name text," + "email text" + ");"); 
  134.             Toast.makeText(getApplicationContext(), "db", Toast.LENGTH_SHORT).show(); 
  135.  
  136.         } 
  137.  
  138.         @Override 
  139.         public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { 
  140.  
  141.         } 
  142.     } 
  143.  


Заранее спасибо!


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

Зарегистрирован: 18 окт 2012, 11:17
Сообщений: 1098
Откуда: г. Красноярск
Благодарил (а): 26 раз.
Поблагодарили: 279 раз.
Нужны логи. Но думаю если удалить и заново установить приложение все будет работать. Вангую некорректное создание бары под первоначальным именем.


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

Зарегистрирован: 09 июн 2015, 10:02
Сообщений: 7
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.
klblk писал(а):
Нужны логи. Но думаю если удалить и заново установить приложение все будет работать. Вангую некорректное создание бары под первоначальным именем.


Слушай, спасибо тебе огромное! Всю голову успел сломать.

Прочитав твое сообщение установил на телефон, заработало. Снес на эмуляторе, заново поставил - заработало. :?
Сразу за благодарностью - вопрос: что за баг такой интересный? Из за чего происходит некорректная установка, как часто происходит, и самое главное как по логам выяснить, что это не в коде проблема..?


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

Зарегистрирован: 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 июн 2015, 07:00 
Аватар пользователя

Зарегистрирован: 18 окт 2012, 11:17
Сообщений: 1098
Откуда: г. Красноярск
Благодарил (а): 26 раз.
Поблагодарили: 279 раз.
dosssik писал(а):
klblk писал(а):
Нужны логи. Но думаю если удалить и заново установить приложение все будет работать. Вангую некорректное создание бары под первоначальным именем.


Слушай, спасибо тебе огромное! Всю голову успел сломать.

Прочитав твое сообщение установил на телефон, заработало. Снес на эмуляторе, заново поставил - заработало. :?
Сразу за благодарностью - вопрос: что за баг такой интересный? Из за чего происходит некорректная установка, как часто происходит, и самое главное как по логам выяснить, что это не в коде проблема..?


это не баг. Скорее всего когда писал код запускал промежуточную не готовую версию, где вариант базы отличался от финального.

По логам и ошибкам смотри сюда http://forum.startandroid.ru/viewtopic.php?f=60&t=3198


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

Зарегистрирован: 09 июн 2015, 10:02
Сообщений: 7
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.
klblk писал(а):
dosssik писал(а):
klblk писал(а):
Нужны логи. Но думаю если удалить и заново установить приложение все будет работать. Вангую некорректное создание бары под первоначальным именем.


Слушай, спасибо тебе огромное! Всю голову успел сломать.

Прочитав твое сообщение установил на телефон, заработало. Снес на эмуляторе, заново поставил - заработало. :?
Сразу за благодарностью - вопрос: что за баг такой интересный? Из за чего происходит некорректная установка, как часто происходит, и самое главное как по логам выяснить, что это не в коде проблема..?


это не баг. Скорее всего когда писал код запускал промежуточную не готовую версию, где вариант базы отличался от финального.

По логам и ошибкам смотри сюда http://forum.startandroid.ru/viewtopic.php?f=60&t=3198


Большое спасибо за ссылку, сейчас засяду смотреть
Если не изменяет память - приложение в процессе написания не запускал. А каким образом может отличаться вариант базы? Вы имеете ввиду, что в процессе написания я мог создать базу "myDB", а потом обращался к "myDb", что собственно и провоцировало ошибку? Заранее прошу прощение за корявую формулировку вопроса :geek:


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

Зарегистрирован: 09 июн 2015, 10:02
Сообщений: 7
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.
Foenix писал(а):
это не баг
нужно знать что такое версия базы данных вообще-то
и правильно это все программировать.

А можно, пожалуйста, поподробнее? С SQLite раньше не сталкивался, и в целом опыт с базами данных ограничивается упражнениями и видеоуроками с YouTube. Соответственно не совсем понимаю какая связь между версией и названием БД. Буду очень признателен, если объясните. очень хочется разобраться
Спасибо


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

Зарегистрирован: 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
СообщениеДобавлено: 23 июн 2015, 14:37 

Зарегистрирован: 09 июн 2015, 10:02
Сообщений: 7
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.
Ребята, снова привет, и снова вопрос.

Вопрос связан с конструкторами класса DBHelper.
У класса SQLiteOpenHelper, от которого мы наследуем DBHelper, имеется два дефолтных конструктора:

Код: [ Загрузить ] [ Скрыть ]
  1. public SQLiteOpenHelper(Context context, String name, CursorFactory factory, int version) { 
  2.         throw new RuntimeException("Stub!"); 
  3.     } 
  4.  
  5.     public SQLiteOpenHelper(Context context, String name, CursorFactory factory, int version, DatabaseErrorHandler errorHandler) { 
  6.         throw new RuntimeException("Stub!"); 
  7.     } 


В коде урока же, мы создаем свой конструктор с единственными параметром на вход (конеткст), и конструктору суперкласса вручную передаем константы (имя базы данных, версию и тд):

Код: [ Загрузить ] [ Скрыть ]
  1. public DBHelper(Context context) { 
  2.       // конструктор суперкласса 
  3.       super(context, "myDB", null, 1); 
  4.     } 


Соответственно вопрос - почему мы пишем такую конструкцию, когда можно просто в методе onCreate нашей активити передать все эти параметры дефолтному конструктору? Тобишь:
Код: [ Загрузить ] [ Скрыть ]
  1. dbHelper = new DBHelper(this, "myDb", null, 1) 


Не очень понимаю смысл этого действия, буду очень признателен, если объясните. Понимаю, что возможно вопрос дурацкий, но мы же здесь, что бы учиться, так?)
Заранее спасибо


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

Зарегистрирован: 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
СообщениеДобавлено: 25 июн 2015, 16:31 

Зарегистрирован: 09 июн 2015, 10:02
Сообщений: 7
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.
Foenix писал(а):
в данном случае это сделано больше для удобства, мы передаем только изменяющийся параметр, а о других создающий класс не должен знать - зачем ему имя базы, к примеру? а если вы имя поменяете, то по всей проге шарить и искать где вы его упоминали, а тут - все в одном месте..


Спасибо, что разъяснили! Раньше не встречал такой прием


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

Зарегистрирован: 06 мар 2015, 22:41
Сообщений: 3
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Здрасьте. Объясните пожалуйста вот этот help:

2.1 Determination Of Column Affinity

The affinity of a column is determined by the declared type of the column, according to the following rules in the order shown:

1. If the declared type contains the string "INT" then it is assigned INTEGER affinity.


2. If the declared type of the column contains any of the strings "CHAR", "CLOB", or "TEXT" then that column has TEXT affinity. Notice that the type VARCHAR contains the string "CHAR" and is thus assigned TEXT affinity.

3. If the declared type for a column contains the string "BLOB" or if no type is specified then the column has affinity NONE.

4. If the declared type for a column contains any of the strings "REAL", "FLOA", or "DOUB" then the column has REAL affinity.

Otherwise, the affinity is NUMERIC.

Note that the order of the rules for determining column affinity is important. A column whose declared type is "CHARINT" will match both rules 1 and 2 but the first rule takes precedence and so the column affinity will be INTEGER.

Я так понял, что если я хочу в таблицу закинуть int, string, float и double, то при создании таблица я должен указать следующий текст:

String s = "20.07.2015"
int i = 5;
float f = 0.833f;
double d = 3.5;

Код: [ Загрузить ] [ Скрыть ]
  1. class DBHelper extends SQLiteOpenHelper { 
  2.  
  3.         public DBHelper(Context context) { 
  4.             super(context, "myDB", null, 1); 
  5.         } 
  6.  
  7.         @Override 
  8.         public void onCreate(SQLiteDatabase db) { 
  9.             Log.d("onCreate", "DataBase"); 
  10.             db.execSQL("CREATE TABLE myTrips (" 
  11.                     + "id integer primary key autoincrement," 
  12.                     + "date text," 
  13.                     + "days integer," 
  14.                     + "specificWeight real," 
  15.                     + "factor real," + ");"); 
  16.         } 
  17.  
  18.         @Override 
  19.         public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
  20.  
  21.         } 
  22.     } 


Код: [ Загрузить ] [ Скрыть ]
  1. public void onSaveClick(View v){ 
  2.         Log.d("Save", "Click"); 
  3.         cv = new ContentValues();         
  4.  
  5.         db = dbhelper.getWritableDatabase(); 
  6.         cv.put("date", s); 
  7.         cv.put("days", i); 
  8.         cv.put("specificWeight", f); 
  9.         cv.put("factor", d); 
  10.          
  11.         rowID = db.insert("myTrips", null, cv); 
  12.         Log.d("ME", "row inserted, ID = " + rowID); 
  13.  
  14.         Toast.makeText(TripsRecords.this, "Сохранено", Toast.LENGTH_SHORT).show(); 
  15.     } 
  16.  
  17.     public void onReadClick(View v){ 
  18.         Log.d("Read", "Click"); 
  19.         Cursor c = db.query("myTrips", null, null, null, null, null, null); 
  20.  
  21.         if(c.moveToFirst()){ 
  22.             int idColIndex = c.getColumnIndex("id"); 
  23.             int dateColIndex = c.getColumnIndex("date"); 
  24.             int daysColIndex = c.getColumnIndex("days"); 
  25.             int specificWeightColIndex = c.getColumnIndex("specificWeight");             
  26.             int factorColIndex = c.getColumnIndex("factor"); 
  27.  
  28.             do { 
  29.                 Log.d("ME", 
  30.                         "ID = " + c.getInt(idColIndex) + 
  31.                         ", date = " + c.getString(dateColIndex) + 
  32.                         ", days = " + c.getString(daysColIndex) + 
  33.                         ", specificWeight = " + c.getString(specificWeightColIndex) + 
  34.                         ", factor = " + c.getString(factorColIndex)); 
  35.             }while(c.moveToNext()); 
  36.         }else{ 
  37.             Log.d("ME", "Нет записей"); 
  38.         } 
  39.         c.close(); 
  40.         dbhelper.close(); 
  41.     } 


Правильно ли создана таблица?


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

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

Чтобы не путаться, лично я придерживаюсь при создании таблицы обозначений типов с сайта sqlite:
Цитата:
INTEGER. The value is a signed integer, stored in 1, 2, 3, 4, 6, or 8 bytes depending on the magnitude of the value.

REAL. The value is a floating point value, stored as an 8-byte IEEE floating point number.

TEXT. The value is a text string, stored using the database encoding (UTF-8, UTF-16BE or UTF-16LE).

BLOB. The value is a blob of data, stored exactly as it was input.

_________________
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
СообщениеДобавлено: 21 окт 2015, 12:59 

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


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

Зарегистрирован: 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
СообщениеДобавлено: 15 мар 2016, 21:33 

Зарегистрирован: 15 мар 2016, 03:10
Сообщений: 9
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Про даты никак не могу понять.
Мне нужно в БД хранить дату
Код: [ Загрузить ] [ Скрыть ]
  1. //Создаю таблицу как в учили в уроке 
  2. public static final String KEY_DATA = "dataDoc"; 
  3. ... 
  4.       db.execSQL("create table " + TABLE_MSG + "(" + KEY_ID 
  5.                 + " integer primary key," + KEY_DATA + " text," + 
  6.  
  7. // Записываю тоже как в уроке учили 
  8.   contentValues.put(DbHelper.KEY_DATA, "2016-01-01"); 
  9.    ... 
  10.   database.insert(DbHelper.TABLE_MSG, null, contentValues); 
  11.  
  12. //теперь хочу вывести данные БД в список 
  13.  
  14.            do { 
  15.  
  16.                 View stroka = ltInflater.inflate(R.layout.stroka, linLayout, false); 
  17.                 TextView datаDoc = (TextView) stroka.findViewById(R.id.txtDateDoc); 
  18.                 datаDoc.setText("Дата: " + cursor.getInt(DataDocIndex)); // 
  19.                 linLayout.addView(stroka); 
  20.  
  21.             } while (cursor.moveToNext()); 


На выходе - Дата: 2016
Какую строку при этом записывать не суть (01.01.2016, 2016/01/01, 01 января 2016, ... ) - на выходе все равно приведенная к числу строка.
Что я не так делаю?
Нужно записывать как-то иначе или извлекать в каком-то другом виде?


П.С. Ногами не пинайте, плз. После 1С тяжело понять что она хочет ...


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

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

_________________
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
СообщениеДобавлено: 19 мар 2016, 23:06 

Зарегистрирован: 19 мар 2016, 22:51
Сообщений: 3
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Для начала хочу поблагодарить за проект. Уроки понравились есть что-почитать и поучится.

Помогите плиз новичку. Написал небольшое приложение с использованием баз данных. При первом запуске программы вилетает сообщение о ошибке но приложение дальше работает после нажатие на Ок. Ноут у меня слабинький поэтому эмулятор не использую, тестирую сразу на телефоне или планшете.
Лог ошибки:
Код: [ Загрузить ] [ Скрыть ]
  1. 03-19 21:38:47.069 28649-28649/com.example.misha.fizmap10 E/AndroidRuntime: FATAL EXCEPTION: main 
  2.                                                                             Process: com.example.misha.fizmap10, PID: 28649 
  3.                                                                             java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.misha.fizmap10/com.example.misha.fizmap10.main}: java.lang.IllegalArgumentException: the bind value at index 1 is null 
  4.                                                                                 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2358) 
  5.                                                                                 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2410) 
  6.                                                                                 at android.app.ActivityThread.access$800(ActivityThread.java:155) 
  7.                                                                                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1331) 
  8.                                                                                 at android.os.Handler.dispatchMessage(Handler.java:110) 
  9.                                                                                 at android.os.Looper.loop(Looper.java:193) 
  10.                                                                                 at android.app.ActivityThread.main(ActivityThread.java:5388) 
  11.                                                                                 at java.lang.reflect.Method.invokeNative(Native Method) 
  12.                                                                                 at java.lang.reflect.Method.invoke(Method.java:515) 
  13.                                                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
  14.                                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:655) 
  15.                                                                                 at dalvik.system.NativeStart.main(Native Method) 
  16.                                                                              Caused by: java.lang.IllegalArgumentException: the bind value at index 1 is null 
  17.                                                                                 at android.database.sqlite.SQLiteProgram.bindString(SQLiteProgram.java:164) 
  18.                                                                                 at android.database.sqlite.SQLiteProgram.bindAllArgsAsStrings(SQLiteProgram.java:200) 
  19.                                                                                 at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:47) 
  20.                                                                                 at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1339) 
  21.                                                                                 at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1186) 
  22.                                                                                 at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1057) 
  23.                                                                                 at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1225) 
  24.                                                                                 at com.example.misha.fizmap10.main.onCreate(main.java:201) 
  25.                                                                                 at android.app.Activity.performCreate(Activity.java:5280) 
  26.                                                                                 at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088) 
  27.                                                                                 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2322) 
  28.                                                                                 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2410)  
  29.                                                                                 at android.app.ActivityThread.access$800(ActivityThread.java:155)  
  30.                                                                                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1331)  
  31.                                                                                 at android.os.Handler.dispatchMessage(Handler.java:110)  
  32.                                                                                 at android.os.Looper.loop(Looper.java:193)  
  33.                                                                                 at android.app.ActivityThread.main(ActivityThread.java:5388)  
  34.                                                                                 at java.lang.reflect.Method.invokeNative(Native Method)  
  35.                                                                                 at java.lang.reflect.Method.invoke(Method.java:515)  
  36.                                                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)  
  37.                                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:655)  
  38.                                                                                 at dalvik.system.NativeStart.main(Native Method)  


При повторном запуске приложения на девайсе ошибка больше не возникает.
У меня подозрение что ошибка возникает при создании базы.

Клас базы
Код: [ Загрузить ] [ Скрыть ]
  1. class DBHelper extends SQLiteOpenHelper { 
  2.  
  3.     public final String TABLE_BAZE = "table_fizmat"; 
  4.  
  5.     public DBHelper(Context context) { 
  6.         // конструктор суперкласса 
  7.         super(context, "myDB1", null, 1); 
  8.     } 
  9.  
  10.     @Override 
  11.     public void onCreate(SQLiteDatabase db) { 
  12.  
  13.         // создаем таблицу с полями 
  14.         db.execSQL("create table " + TABLE_BAZE + " (" 
  15.                 + "id integer primary key autoincrement," 
  16.                 + "grupp text," 
  17.                 + "predmet text, vykladach text, typpary integer, denj integer, nomerpary integer, auditorija text, chyseln integer, predmet_k text" + ");"); 
  18.     } 
  19.  
  20.     @Override 
  21.     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
  22.  
  23.     } 


П.С. На телефонах HTC из-за ошибки не стартует вообще.


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

Зарегистрирован: 20 окт 2012, 12:01
Сообщений: 4201
Благодарил (а): 68 раз.
Поблагодарили: 467 раз.
at com.example.misha.fizmap10.main.onCreate(main.java:201)
а тут что?

_________________
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


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

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


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

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