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

Добро пожаловать на форум сайта startandroid.ru
Текущее время: 20 июл 2017, 15:43

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




Начать новую тему Ответить на тему  [ Сообщений: 760 ]  На страницу 1, 2, 3, 4, 5 ... 38  След.
Автор Сообщение
 Заголовок сообщения: Урок 34. Хранение данных. SQLite
СообщениеДобавлено: 17 ноя 2011, 03:00 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1339
Благодарил (а): 0 раз.
Поблагодарили: 72 раз.
В этом уроке:

- хранение данных с помощью SQLite

Click here to read this article!

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Последний раз редактировалось damager82 01 май 2017, 16:39, всего редактировалось 14 раз(а).

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

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1339
Благодарил (а): 0 раз.
Поблагодарили: 72 раз.
Цитата:
А как тестировать через junit данный коннект к базе? Как создать ограниченный контекст, который можно создать для тестирования provider content. Есть такая возможность? (что бы не портить основную базу эмулятора)

Код: [ Загрузить ] [ Скрыть ]
  1. public class DBHelperTest extends AndroidTestCase { 
  2. public DBHelperTest() { 
  3.  
  4. public void test() { 
  5. DBHelper db = new DBHelper( getContext()); 
  6. db.close(); 
  7.  


Вроде так заработало :) сейчас буду пробовать )

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


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

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1339
Благодарил (а): 0 раз.
Поблагодарили: 72 раз.
Цитата:
Можно ли создать сохранить базу на карте памяти, что бы потом без root-а скопировать её накомпьютер? Пробовал методы Androida openOrCreateDat abase, ноони в любом случае создают базу в data/date/your_package


У меня сработало.
Только надо добавить Permission - android.permission.WRITE_EXTERNAL_ STORAGE в манифест-файл.

Исходник:
Код: [ Загрузить ] [ Скрыть ]
  1. void prepareBD() { 
  2. File sdCard = Environment.getExternalStor ageDirectory();  
  3. File directory = new File(sdCard.getAbsolutePath () + "/MyDB"); 
  4. directory.mkdirs(); 
  5. File dbFile = new File(directory, "database"); 
  6. SQLiteDatabase db = SQLiteDatabase.openOrCreateDat abase(dbFile, null); 
  7. db.execSQL("drop table if exists mytab;"); 
  8. db.execSQL("create table mytab (id integer primary key autoincrement, name text);"); 
  9. db.execSQL("insert into mytab (name) values ('test');"); 
  10. db.close(); 

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


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

Зарегистрирован: 09 янв 2012, 14:45
Сообщений: 2386
Откуда: Самара
Благодарил (а): 102 раз.
Поблагодарили: 321 раз.
что за странный импорт ? Я так понимаю это опечатка.
Цитата:
import ru.startandroid.develop.p0341simpelsqlite.R;

_________________
Изображение

А тот ли ты путь выбрал, разработчик?
Хочешь знать ошибки ответ? Загляни в logcat!


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

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1339
Благодарил (а): 0 раз.
Поблагодарили: 72 раз.
no-- писал(а):
что за странный импорт ? Я так понимаю это опечатка.
Цитата:
import ru.startandroid.develop.p0341simpelsqlite.R;


Да, очепятка. Я там с проектами немного намудрил, забыл пофиксить потом.

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


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

Зарегистрирован: 07 фев 2012, 18:46
Сообщений: 7
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пытаюсь добавить к таблице еще один столбец.
Выдает сообщение: error code = 1, msg=table mytable has no colomn named tel.
Подскажите что я делаю не так.

package com.b3testapp;

import com.b3testapp.R;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class B3TestAppActivity extends Activity implements OnClickListener {

final String LOG_TAG = "myLogs";

Button btnAdd, btnRead, btnClear;
EditText etName, etEmail, etTel;

DBHelper dbHelper;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.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);
etTel = (EditText) findViewById(R.id.etTel);
// создаем объект для создания и управления версиями БД
dbHelper = new DBHelper(this);
}


@Override
public void onClick(View v) {

// создаем объект для данных
ContentValues cv = new ContentValues();

// получаем данные из полей ввода
String name = etName.getText().toString();
String email = etEmail.getText().toString();
String tel = etTel.getText().toString();
// подключаемся к БД
SQLiteDatabase db = dbHelper.getWritableDatabase();


switch (v.getId()) {
case R.id.btnAdd:
Log.d(LOG_TAG, "--- Insert in mytable: ---");
// подготовим данные для вставки в виде пар: наименование столбца - значение

cv.put("name", name);
cv.put("email", email);
cv.put("tel", tel);
// вставляем запись и получаем ее ID
long rowID = db.insert("mytable", null, cv);
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("mytable", null, null, null, null, null, null);

// ставим позицию курсора на первую строку выборки
// если в выборке нет строк, вернется false
if (c.moveToFirst()) {

// определяем номера столбцов по имени в выборке
int idColIndex = c.getColumnIndex("id");
int nameColIndex = c.getColumnIndex("name");
int emailColIndex = c.getColumnIndex("email");
int telColIndex = c.getColumnIndex("tel");
do {
// получаем значения по номерам столбцов и пишем все в лог
Log.d(LOG_TAG,
"ID = " + c.getInt(idColIndex) +
", name = " + c.getString(nameColIndex) +
", email = " + c.getString(emailColIndex) + ", tel = " + c.getString(telColIndex));
// переход на следующую строку
// а если следующей нет (текущая - последняя), то false - выходим из цикла
} while (c.moveToNext());
} else
Log.d(LOG_TAG, "0 rows");
break;
case R.id.btnClear:
Log.d(LOG_TAG, "--- Clear mytable: ---");
// удаляем все записи
int clearCount = db.delete("mytable", null, null);
Log.d(LOG_TAG, "deleted rows count = " + clearCount);
break;
}
// закрываем подключение к БД
dbHelper.close();
}



class DBHelper extends SQLiteOpenHelper {

public DBHelper(Context context) {
// конструктор суперкласса
super(context, "myDB", null, 1);
}

@Override
public void onCreate(SQLiteDatabase db) {
Log.d(LOG_TAG, "--- onCreate database ---");
// создаем таблицу с полями
db.execSQL("create table mytable ("
+ "id integer primary key autoincrement,"
+ "name text,"
+ "email text, " + "tel text " + ");");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}
}
}

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Name"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp">
</TextView>
<EditText
android:id="@+id/etName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1">
<requestFocus>
</requestFocus>
</EditText>
</LinearLayout>
<LinearLayout
android:id="@+id/linearLayout3"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Email"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp">
</TextView>
<EditText
android:id="@+id/etEmail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1">
</EditText>
</LinearLayout>
<LinearLayout
android:id="@+id/linearLayout3"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Telefon"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp">
</TextView>
<EditText
android:id="@+id/etTel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1">
</EditText>
</LinearLayout>
<LinearLayout
android:id="@+id/linearLayout2"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/btnAdd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Add">
</Button>
<Button
android:id="@+id/btnRead"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Read">
</Button>
<Button
android:id="@+id/btnClear"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Clear">
</Button>
</LinearLayout>
</LinearLayout>


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

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1339
Благодарил (а): 0 раз.
Поблагодарили: 72 раз.
А метод onCreate точно срабатывает?
Может пытаетесь в ранее созданную базу запись вставлять. Попробуйте удалить файл базы данных, пусть заново создаст.

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


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

Зарегистрирован: 15 фев 2012, 20:14
Сообщений: 18
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
А можно ли из списка сделать массив? Например столбец name загнать в массив names[]?


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

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1339
Благодарил (а): 0 раз.
Поблагодарили: 72 раз.
OctahedroN писал(а):
А можно ли из списка сделать массив? Например столбец name загнать в массив names[]?


В смысле из курсора вытащить все значения столбца name и поместить в массив?
Я не встречал такого метода.
Скорее всего только создание массива, перебор строк курсора и заполнение массива. Кода немного получается.

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


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

Зарегистрирован: 15 фев 2012, 20:14
Сообщений: 18
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
case R.id.Button:
Cursor c1 = db.query("myt", null, null, null, null, null, null);
if (c1.moveToFirst()) {

int XColIndex = c1.getColumnIndex("X");
int i=0;

do {
X1[i]=c1.getString(XColIndex);
i++;
} while (c1.moveToNext());
} else
Log.d(LOG_TAG, "0 rows");

Я только начинаю программировать и возможно я где то грубо ошибаюсь. Написал такой код, но при нажатии кнопки Button в приложении выскакивает ошибка. Можете сказать что я делаю не так?


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

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1339
Благодарил (а): 0 раз.
Поблагодарили: 72 раз.
OctahedroN писал(а):
Я только начинаю программировать и возможно я где то грубо ошибаюсь. Написал такой код, но при нажатии кнопки Button в приложении выскакивает ошибка. Можете сказать что я делаю не так?


Вроде все верно ...
А массив X1 вы как объявляли?

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


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

Зарегистрирован: 15 фев 2012, 20:14
Сообщений: 18
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
damager82 писал(а):
OctahedroN писал(а):
Вроде все верно ...
А массив X1 вы как объявляли?


final String LOG_TAG = "myLogs";
String X1[];

Больше я с ним ничего не делал...


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

Зарегистрирован: 17 фев 2012, 21:23
Сообщений: 1339
Откуда: Мордор
Благодарил (а): 16 раз.
Поблагодарили: 161 раз.
OctahedroN, советую посмотреть в логи, там должна быть указана строка кода которая вызвала ошибку.
Скорее всего ошибку вызывает: X1[i]=c1.getString(XColIndex);
Для присвоения элементу массива значения нужно этот массив создать.
Перед циклом напишите: X1= new String[c1.getCount()];

_________________
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.


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

Зарегистрирован: 15 фев 2012, 20:14
Сообщений: 18
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
KamiSempai, damager82, спасибо, всё заработало)


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

Зарегистрирован: 25 фев 2012, 00:32
Сообщений: 1
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Ребят скажите. После вызова
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. mydb.delete("mytable", null, null);

все строки удаляются,но вот нумерация id сохраняется. Так и должно быть? Или как то можно нумерацию id обнулить отдельно. В проекте приходится постоянно то добавлять то стирать все из таблицы, а счетчик все бежит


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

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1339
Благодарил (а): 0 раз.
Поблагодарили: 72 раз.
kkkpppccc писал(а):
Так и должно быть? Или как то можно нумерацию id обнулить отдельно. В проекте приходится постоянно то добавлять то стирать все из таблицы, а счетчик все бежит


Да, так и должно быть. Но есть способ сбросить. Вот тут написано, что данные по счетчику лежат в таблице SQLITE_SEQUENCE

Попробуйте выполнить что-нить типа:
delete from sqlite_sequence where name='<имя вашей таблицы>';

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


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

Зарегистрирован: 07 мар 2012, 12:50
Сообщений: 85
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Скажите... такой вопрос....
а как скажем отобразить всю базу не в логах а в виде таблицы?


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

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1339
Благодарил (а): 0 раз.
Поблагодарили: 72 раз.
Grid или TableLayout можно использовать

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


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

Зарегистрирован: 10 май 2012, 10:11
Сообщений: 38
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Доброго времени суток!
Во первых, огромное спасибо за написанные уроки!!!
Уже неделю не вылезаю с вашего сайта!!! ТАК ДЕРЖАТЬ!)

Теперь по теме.
После запуска 34го урока мой эмулятор не хочет запускать приложение, и матерится ошибкой:

The application P0341_SimpleSQLite (process ru.startandroid.develop.p0341simplesqlite) has stoppet unexpectedly. Please try again

P.S. После вставки кода был была одна ошибка на onClick(View v)
@Override
public void onClick(View v) {

// создаем объект для данных
ContentValues cv = new ContentValues();

// получаем данные из полей ввода
String name = etName.getText().toString();
String email = etEmail.getText().toString();


Просило " Remove '@Override' annotation " Что я сделал и запустил приложение.
Больше ошибок не было...

Помогите понять в чем проблема ... и вообще из-за чего возникает такая ошибка при запуске приложения на эмуляторе.

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


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

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1339
Благодарил (а): 0 раз.
Поблагодарили: 72 раз.
Xroft писал(а):
Во первых, огромное спасибо за написанные уроки!!!
Уже неделю не вылезаю с вашего сайта!!! ТАК ДЕРЖАТЬ!)

Просило " Remove '@Override' annotation " Что я сделал и запустил приложение.


Спасибо )

У вас наверно 7-я версия Java, она ругается на Ovveride - viewtopic.php?f=3&t=117&p=149#p150
Я на шестой сижу, и иногда забываю удалять эту аннотацию из кода.

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 760 ]  На страницу 1, 2, 3, 4, 5 ... 38  След.

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


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

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