Урок 34. Хранение данных. SQLite
Re: Урок 34. Хранение данных. SQLite
А почему у меня в file explorer не открывается папка data?
Re: Урок 34. Хранение данных. SQLite
Я извиняюсь, но я не могу повторить код урок 34 ! хоть стреляйся !
уже несколько раз переписывал урок !! на разных ноутбуках и с разными версиями Android Studio !
Еще дико извиняюсь !! Осваиваю Андроид ! Начинал с СМ2М на мнемокоде в 1980г.
Выкладываю -
Activity , DBHelper и Blog отладки :
уже несколько раз переписывал урок !! на разных ноутбуках и с разными версиями Android Studio !
Еще дико извиняюсь !! Осваиваю Андроид ! Начинал с СМ2М на мнемокоде в 1980г.
Выкладываю -
Activity , DBHelper и Blog отладки :
Код: Выделить всё
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
public final String LOG_TAG = "myLogs";
Button btnAdd, btnRead, btnClear;
EditText etName, etEmail;
DBHelper dbHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnAdd = (Button) findViewById(R.id.btnAdd);
btnAdd.setOnClickListener(this);
btnRead = (Button) findViewById(R.id.btnRead);
btnRead.setOnClickListener(this);
btnClear = (Button) findViewById(R.id.btnClear);
btnClear.setOnClickListener(this);
etName = (EditText) findViewById(R.id.etName);
etEmail = (EditText) findViewById(R.id.etEmail);
dbHelper = new DBHelper(this);
}
@Override
public void onClick(View v) {
ContentValues cv = new ContentValues();
/* ContentValues contentValues = new ContentValues(); */
// получаем данные из полей ввода
String name = etName.getText().toString();
String email = etEmail.getText().toString();
SQLiteDatabase db = dbHelper.getWritableDatabase();
switch (v.getId()){
case R.id.btnAdd:
Log.d(LOG_TAG, "--- Insert in mytable: ---");
// подготовим данные для вставки в виде пар: наименование столбца - значение
cv.put(DBHelper.KEY_NAME, name);
cv.put(DBHelper.KEY_MAIL, email);
// вставляем запись и получаем ее ID
/* long rowID = db.insert("mytable", null, cv); */
db.insert(DBHelper.TABLE_CONTACTS,null,cv);
Log.d(LOG_TAG, "row inserted, ID = " );
/* Log.d(LOG_TAG, "row inserted, ID = " + rowID); */
break;
case R.id.btnRead:
Log.d(LOG_TAG, "--- Rows in mytable: ---");
// делаем запрос всех данных из таблицы mytable, получаем Cursor
Cursor c = db.query(DBHelper.TABLE_CONTACTS, null, null, null, null, null, null);
// ставим позицию курсора на первую строку выборки
// если в выборке нет строк, вернется false
if (c.moveToFirst()) {
// определяем номера столбцов по имени в выборке
int idColIndex = c.getColumnIndex(DBHelper.KEY_ID);
int nameColIndex = c.getColumnIndex(DBHelper.KEY_NAME);
int emailColIndex = c.getColumnIndex(DBHelper.KEY_MAIL);
do {
// получаем значения по номерам столбцов и пишем все в лог
Log.d(LOG_TAG,
"ID = " + c.getInt(idColIndex)
+ ", name = " + c.getString(nameColIndex)
+ ", email = " + c.getString(emailColIndex));
// переход на следующую строку
// а если следующей нет (текущая - последняя), то false - выходим из цикла
} while (c.moveToNext());
} else
Log.d(LOG_TAG, "0 rows");
c.close();
break;
case R.id.btnClear:
Log.d(LOG_TAG, "--- Clear mytable: ---");
// удаляем все зап //
int clearCount = db.delete(DBHelper.TABLE_CONTACTS, null, null);
Log.d(LOG_TAG, "deleted rows count = " + clearCount);
break;
}
dbHelper.close();
}
}
Код: Выделить всё
public class DBHelper extends SQLiteOpenHelper{
public final String LOG_TAG = "myLogs";
public static final int DATABASE_VER = 1;
public static final String DATABASE_NAME = "contactDb";
public static final String TABLE_CONTACTS = "contacts";
public static final String KEY_ID = "_id";
public static final String KEY_NAME = "name";
public static final String KEY_MAIL = "mail";
public DBHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VER );
/* super(context, TABLE_CONTACTS, null, DATABASE_VER ); */
/* super(context, "mytable", null,1 ); */
}
public SQLiteDatabase getWritableDatabase() { return null ; }
public void close() {
}
@Override
public void onCreate(SQLiteDatabase db) {
Log.d(LOG_TAG," ...onCreate database...");
db.execSQL("create table " + TABLE_CONTACTS + "(" + KEY_ID
+ " integer primary key," + KEY_NAME + " text,"
+ KEY_MAIL + " text" + ")");
/* db.execSQL("create table mytable ("
+ " integer primary key autoincrement,"
+ " integer primary key,"
+ " name text,"
+ " email text" + ")"); */
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("drop table if exists " + TABLE_CONTACTS);
onCreate(db); }
}
Код: Выделить всё
E/BinaryDictionaryGetter: Could not find a dictionary pack
E/ActivityThread: Failed to find provider info for com.android.inputmethod.latin.dictionarypack
D/myLogs: --- Insert in mytable: ---
D/AndroidRuntime: Shutting down VM
W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0xa61b0908)
E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.NullPointerException
at com.example.vikg.mylesson.MainActivity.onClick(MainActivity.java:67)
at android.view.View.performClick(View.java:4204)
at android.view.View$PerformClick.run(View.java:17355)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5041)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)
W/ActivityManager: Force finishing activity com.example.vikg.mylesson/.MainActivity
D/genymotion_audio: out_write: pcm_write() with out_frames=558 frame_size=4 returned -EPIPE
D/genymotion_audio: out_write: pcm_write() with out_frames=557 frame_size=4 returned -EPIPE
D/genymotion_audio: out_write: pcm_write() with out_frames=557 frame_size=4 returned -EPIPE
D/genymotion_audio: out_write: pcm_write() with out_frames=557 frame_size=4 returned -EPIPE
D/dalvikvm: GC_FOR_ALLOC freed 200K, 25% free 6240K/8244K, paused 40ms, total 42ms
I/dalvikvm-heap: Grow heap (frag case) to 7.283MB for 1127532-byte allocation
D/genymotion_audio: out_write: pcm_write() with out_frames=557 frame_size=4 returned -EPIPE
D/dalvikvm: GC_FOR_ALLOC freed 1K, 22% free 7339K/9348K, paused 40ms, total 40ms
D/genymotion_audio: out_write: pcm_write() with out_frames=558 frame_size=4 returned -EPIPE
D/genymotion_audio: out_write: pcm_write() with out_frames=558 frame_size=4 returned -EPIPE
D/dalvikvm: GC_CONCURRENT freed 40K, 21% free 7440K/9348K, paused 2ms+1ms, total 346ms
W/ActivityManager: Activity pause timeout for ActivityRecord{532c9858 u0 com.example.vikg.mylesson/.MainActivity}
D/genymotion_audio: out_write: pcm_write() with out_frames=557 frame_size=4 returned -EPIPE
I/qtaguid: Failed write_ctrl(s 1 10023) res=-1 errno=1
W/NetworkManagementSocketTagger: setKernelCountSet(10023, 1) failed with errno -1
D/genymotion_audio: out_write: pcm_write() with out_frames=557 frame_size=4 returned -EPIPE
W/EGL_genymotion: eglSurfaceAttrib not implemented
D/genymotion_audio: out_write: pcm_write() with out_frames=557 frame_size=4 returned -EPIPE
D/genymotion_audio: out_write: pcm_write() with out_frames=557 frame_size=4 returned -EPIPE
D/genymotion_audio: out_write: pcm_write() with out_frames=557 frame_size=4 returned -EPIPE
D/genymotion_audio: out_write: pcm_write() with out_frames=558 frame_size=4 returned -EPIPE
D/genymotion_audio: out_write: pcm_write() with out_frames=557 frame_size=4 returned -EPIPE
D/genymotion_audio: out_write: pcm_write() with out_frames=558 frame_size=4 returned -EPIPE
Re: Урок 34. Хранение данных. SQLite
Здравствуйте.
Не могу понять, почему в логах не отображаются буквы, которые ввожу в поля EditText. Цифры все нормально пишет, а буковки совсем не пишет..
Не работает именно когда нажимаю кнопку "read". Т.е. при добавлении, он показывает, что я ввожу, а при чтении почему-то буквы не отображает. Подскажите, пожалуйста, в чем дело!
Не могу понять, почему в логах не отображаются буквы, которые ввожу в поля EditText. Цифры все нормально пишет, а буковки совсем не пишет..
Не работает именно когда нажимаю кнопку "read". Т.е. при добавлении, он показывает, что я ввожу, а при чтении почему-то буквы не отображает. Подскажите, пожалуйста, в чем дело!
Re: Урок 34. Хранение данных. SQLite
Может неправильный метод вызываешь у Cursor. Метод должен быть getString.Seiko писал(а): ↑30 апр 2019, 20:02Здравствуйте.
Не могу понять, почему в логах не отображаются буквы, которые ввожу в поля EditText. Цифры все нормально пишет, а буковки совсем не пишет..
Не работает именно когда нажимаю кнопку "read". Т.е. при добавлении, он показывает, что я ввожу, а при чтении почему-то буквы не отображает. Подскажите, пожалуйста, в чем дело!
Обращайтесь в ЛС. Помогу.
Re: Урок 34. Хранение данных. SQLite
Тезисно извлек для себя из этого урока:
Класс-обработчик БД наследует класс SQLiteOpenHelper.
onCreate – метод, вызывается если БД, к которой мы хотим подключиться не существует.
onUpgrade – метод, вызывается если мы хотим подключиться к БД более новой версии, чем существующая.
ContentValues – создает объект для данных.
Contenvalues.put(“имя поля”, значение)
Подключение к БД
SQLiteDatabase db = dbHelper.getWritableDatabase();
Класс DBHendler наследует SQLiteOpenHelper.
Добавить данные в БД.
db.insert("mytable", null, contentValues);
Удалить данные из БД
db.delete("mytable", null, null);
Чтение данных из БД
db.query("mytable", null, null, null, null, null, null);
Прочитав данные, добавляем их в Cursor
Cursor c = db.query("mytable", null, null, null, null, null, null);
Ставим указатель на первую запись
c.moveToFirst()
Получаем индексы столбцов по именам
c.getColumnIndex
Вывод данных по индексу
c.getString(nameColIndex)
Перебор данных из Cursor
c.moveToNext()
Закрытие курсор
c.close();
В методе onCreate, класса DBHelper создаем таблицу с полями.
sqLiteDatabase.execSQL("create table mytable ("
+ "id integer primary key autoincrement,"
+ "name text,"
+ "email text" + ");");
Обращайтесь в ЛС. Помогу.
Re: Урок 34. Хранение данных. SQLite
Как же я ненавижу вложенные классы ...
Вот, обязательно было DBHelper внутрь пихать ? А с геттерами слабо ??
Вот, обязательно было DBHelper внутрь пихать ? А с геттерами слабо ??