Страница 2 из 19
Re: Урок 136. CursorLoader
Добавлено: 27 ноя 2013, 00:08
Akella
У меня проблема в Andriod Studio.
в модуле DB.java, на этой строке:
[syntax=java]cv.put(COLUMN_IMG, R.drawable.ic_launcher);[/syntax]
получаю ошибку:
Gradle: error: cannot find symbol variable ic_launcher
А нельзя ли как-то расширить этот урок № 136?
Например, в какой папке нужно создавать файл item.xml? Я создал в папке "\src\main\res\values\", правильно ли?
Re: Урок 136. CursorLoader
Добавлено: 27 ноя 2013, 00:11
Akella
item.xml перенёс в папку layout, на видео увидел
Re: Урок 136. CursorLoader
Добавлено: 27 ноя 2013, 18:50
qualitat1ve
Может кто подсказать кто дергает колбек onLoaderReset и как его обрабатывать?
Re: Урок 136. CursorLoader
Добавлено: 27 ноя 2013, 19:20
Foenix
qualitat1ve писал(а):Может кто подсказать кто дергает колбек onLoaderReset и как его обрабатывать?
http://developer.android.com/reference/ ... t.Loader<D>)
Called when a previously created loader is being reset, and thus making its data unavailable. The application should at this point remove any references it has to the Loader's data.
пример обработки
http://www.androiddesignpatterns.com/20 ... nager.html
http://mobile.tutsplus.com/tutorials/an ... sorloader/
Re: Урок 136. CursorLoader
Добавлено: 29 ноя 2013, 18:15
Nialon
Мне интересно сколько модеров обслуживают тему уроков.
Иногда возникает какой-то мелочный вопрос, а там засор по полной.
Дикую модерацию по удалению не пробовали?
rezak90 уже сбежал от проблем на R.id.team
Re: Урок 136. CursorLoader
Добавлено: 29 ноя 2013, 19:22
rezak90
Nialon писал(а):rezak90 уже сбежал от проблем на R.id.team
Я сбежал потому что на форуме нету модераторов, а извините меня разгребать из срача нормальные адекватные вопросы не хочется ибо я трачу на это своё время.
Re: Урок 136. CursorLoader
Добавлено: 29 ноя 2013, 22:24
KamiSempai
Тут все на чистом энтузиазме работает. Модератор на форуме один - это damager82.
Re: Урок 136. CursorLoader
Добавлено: 07 дек 2013, 21:52
Acterix
Код: Выделить всё
// создаем и заполняем БД
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DB_CREATE);
String[] goroda = getResources().getStringArray(R.array.gorodalist);
String[] date = getResources().getStringArray(R.array.datelist);
String[] time = getResources().getStringArray(R.array.timelist);
String[] place = getResources().getStringArray(R.array.placelist);
String[] prise = getResources().getStringArray(R.array.priselist);
// создаем объект для данных
ContentValues cv = new ContentValues();
//добавляем элементы
Random random = new Random();
for (int i = 0; i < 20; i++) {
cv.put(COLUMN_A, goroda[random.nextInt(9)]);
cv.put(COLUMN_B, goroda[random.nextInt(9)]);
cv.put(COLUMN_DATE, date[random.nextInt(9)]);
cv.put(COLUMN_TIME, time[random.nextInt(9)]);
cv.put(COLUMN_PRISE, prise[random.nextInt(9)]);
cv.put(COLUMN_PLACE, place[random.nextInt(9)]);
mDB.insert(DB_TABLE, null, cv);
}
}
приложение закрывается при создании бд, когда комментирую все внутри и создаю пустую базу, то все ок. Пожалуйста помогите разобраться. Если нужно что-то еще показать, говорите.
полный код класса DB:
Код: Выделить всё
package com.example.poputchik_v001;
import java.util.Random;
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.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
public class DB extends Activity{
private static final String DB_NAME = "DataBase";
private static final int DB_VERSION = 1;
private static final String DB_TABLE = "tablereis";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_A = "A";
public static final String COLUMN_B = "B";
public static final String COLUMN_DATE = "Date";
public static final String COLUMN_TIME = "Time";
public static final String COLUMN_PRISE = "Prise";
public static final String COLUMN_PLACE = "Place";
private static final String DB_CREATE =
"create table " + DB_TABLE + "(" +
COLUMN_ID + " integer primary key autoincrement, " +
COLUMN_A + " text, " +
COLUMN_B + " text, " +
COLUMN_DATE + " text, " +
COLUMN_TIME + " text, " +
COLUMN_PRISE + " text, " +
COLUMN_PLACE + " text" +
");";
private final Context mCtx;
private DBHelper mDBHelper;
private SQLiteDatabase mDB;
public DB(Context ctx) {
mCtx = ctx;
}
// открыть подключение
public void open() {
mDBHelper = new DBHelper(mCtx, DB_NAME, null, DB_VERSION);
mDB = mDBHelper.getWritableDatabase();
}
// закрыть подключение
public void close() {
if (mDBHelper!=null) mDBHelper.close();
}
// получить все данные из таблицы DB_TABLE
public Cursor getAllData() {
return mDB.query(DB_TABLE, null, null, null, null, null, null);
}
// добавить запись в DB_TABLE
public void addRec(String A, String B, String Date, String Time, String Prise, String Place) {
ContentValues cv = new ContentValues();
cv.put(COLUMN_A, A);
cv.put(COLUMN_B, B);
cv.put(COLUMN_DATE, Date);
cv.put(COLUMN_TIME, Time);
cv.put(COLUMN_PRISE, Prise);
cv.put(COLUMN_PLACE, Place);
mDB.insert(DB_TABLE, null, cv);
}
// удалить запись из DB_TABLE
public void delRec(long id) {
mDB.delete(DB_TABLE, COLUMN_ID + " = " + id, null);
}
// класс по созданию и управлению БД
private class DBHelper extends SQLiteOpenHelper {
public DBHelper(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
}
// создаем и заполняем БД
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DB_CREATE);
String[] goroda = getResources().getStringArray(R.array.gorodalist);
String[] date = getResources().getStringArray(R.array.datelist);
String[] time = getResources().getStringArray(R.array.timelist);
String[] place = getResources().getStringArray(R.array.placelist);
String[] prise = getResources().getStringArray(R.array.priselist);
// создаем объект для данных
ContentValues cv = new ContentValues();
//добавляем элементы
Random random = new Random();
for (int i = 0; i < 20; i++) {
cv.put(COLUMN_A, goroda[random.nextInt(9)]);
cv.put(COLUMN_B, goroda[random.nextInt(9)]);
cv.put(COLUMN_DATE, date[random.nextInt(9)]);
cv.put(COLUMN_TIME, time[random.nextInt(9)]);
cv.put(COLUMN_PRISE, prise[random.nextInt(9)]);
cv.put(COLUMN_PLACE, place[random.nextInt(9)]);
mDB.insert(DB_TABLE, null, cv);
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
}
Re: Урок 136. CursorLoader
Добавлено: 07 дек 2013, 22:09
rezak90
Acterix писал(а):Если нужно что-то еще показать, говорите.
логи
P.S. вангую что там IndexOfBoundException
Re: Урок 136. CursorLoader
Добавлено: 07 дек 2013, 22:21
Acterix
Код: Выделить всё
12-07 23:13:55.751: D/TextLayoutCache(32174): Using debug level: 0 - Debug Enabled: 0
12-07 23:13:55.811: D/libEGL(32174): loaded /system/lib/egl/libGLES_android.so
12-07 23:13:55.811: D/libEGL(32174): loaded /system/lib/egl/libEGL_adreno200.so
12-07 23:13:55.811: D/libEGL(32174): loaded /system/lib/egl/libGLESv1_CM_adreno200.so
12-07 23:13:55.821: D/libEGL(32174): loaded /system/lib/egl/libGLESv2_adreno200.so
12-07 23:13:55.861: D/OpenGLRenderer(32174): Enabling debug mode 0
12-07 23:13:58.231: D/OpenGLRenderer(32174): Flushing caches (mode 0)
12-07 23:14:08.561: D/OpenGLRenderer(32174): Flushing caches (mode 0)
12-07 23:14:08.591: D/OpenGLRenderer(32174): Flushing caches (mode 1)
12-07 23:14:29.781: D/TextLayoutCache(32194): Using debug level: 0 - Debug Enabled: 0
12-07 23:14:29.841: D/libEGL(32194): loaded /system/lib/egl/libGLES_android.so
12-07 23:14:29.841: D/libEGL(32194): loaded /system/lib/egl/libEGL_adreno200.so
12-07 23:14:29.841: D/libEGL(32194): loaded /system/lib/egl/libGLESv1_CM_adreno200.so
12-07 23:14:29.851: D/libEGL(32194): loaded /system/lib/egl/libGLESv2_adreno200.so
12-07 23:14:29.901: D/OpenGLRenderer(32194): Enabling debug mode 0
12-07 23:14:38.921: D/OpenGLRenderer(32194): Flushing caches (mode 0)
12-07 23:14:43.791: D/TextLayoutCache(32331): Using debug level: 0 - Debug Enabled: 0
12-07 23:14:43.841: D/libEGL(32331): loaded /system/lib/egl/libGLES_android.so
12-07 23:14:43.841: D/libEGL(32331): loaded /system/lib/egl/libEGL_adreno200.so
12-07 23:14:43.851: D/libEGL(32331): loaded /system/lib/egl/libGLESv1_CM_adreno200.so
12-07 23:14:43.851: D/libEGL(32331): loaded /system/lib/egl/libGLESv2_adreno200.so
12-07 23:14:43.901: D/OpenGLRenderer(32331): Enabling debug mode 0
12-07 23:14:45.481: D/OpenGLRenderer(32331): Flushing caches (mode 0)
12-07 23:14:46.111: D/AndroidRuntime(32331): Shutting down VM
12-07 23:14:46.111: W/dalvikvm(32331): threadid=1: thread exiting with uncaught exception (group=0x2b542210)
12-07 23:14:46.141: E/AndroidRuntime(32331): FATAL EXCEPTION: main
12-07 23:14:46.141: E/AndroidRuntime(32331): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.poputchik_v001/com.example.poputchik_v001.SearchActivity}: java.lang.NullPointerException
12-07 23:14:46.141: E/AndroidRuntime(32331): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1967)
12-07 23:14:46.141: E/AndroidRuntime(32331): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992)
12-07 23:14:46.141: E/AndroidRuntime(32331): at android.app.ActivityThread.access$600(ActivityThread.java:127)
12-07 23:14:46.141: E/AndroidRuntime(32331): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158)
12-07 23:14:46.141: E/AndroidRuntime(32331): at android.os.Handler.dispatchMessage(Handler.java:99)
12-07 23:14:46.141: E/AndroidRuntime(32331): at android.os.Looper.loop(Looper.java:137)
12-07 23:14:46.141: E/AndroidRuntime(32331): at android.app.ActivityThread.main(ActivityThread.java:4441)
12-07 23:14:46.141: E/AndroidRuntime(32331): at java.lang.reflect.Method.invokeNative(Native Method)
12-07 23:14:46.141: E/AndroidRuntime(32331): at java.lang.reflect.Method.invoke(Method.java:511)
12-07 23:14:46.141: E/AndroidRuntime(32331): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
12-07 23:14:46.141: E/AndroidRuntime(32331): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
12-07 23:14:46.141: E/AndroidRuntime(32331): at dalvik.system.NativeStart.main(Native Method)
12-07 23:14:46.141: E/AndroidRuntime(32331): Caused by: java.lang.NullPointerException
12-07 23:14:46.141: E/AndroidRuntime(32331): at android.content.ContextWrapper.getResources(ContextWrapper.java:81)
12-07 23:14:46.141: E/AndroidRuntime(32331): at com.example.poputchik_v001.DB$DBHelper.onCreate(DB.java:94)
12-07 23:14:46.141: E/AndroidRuntime(32331): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:165)
12-07 23:14:46.141: E/AndroidRuntime(32331): at com.example.poputchik_v001.DB.open(DB.java:52)
12-07 23:14:46.141: E/AndroidRuntime(32331): at com.example.poputchik_v001.SearchActivity.onCreate(SearchActivity.java:39)
12-07 23:14:46.141: E/AndroidRuntime(32331): at android.app.Activity.performCreate(Activity.java:4465)
12-07 23:14:46.141: E/AndroidRuntime(32331): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
12-07 23:14:46.141: E/AndroidRuntime(32331): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1931)
12-07 23:14:46.141: E/AndroidRuntime(32331): ... 11 more
12-07 23:14:46.201: D/dalvikvm(32331): GC_CONCURRENT freed 229K, 4% free 9054K/9415K, paused 3ms+2ms
12-07 23:19:46.161: I/Process(32331): Sending signal. PID: 32331 SIG: 9
Re: Урок 136. CursorLoader
Добавлено: 07 дек 2013, 22:47
rezak90
эх, ванга подвела... ошибка NullPointerException, контекст нуловый
Re: Урок 136. CursorLoader
Добавлено: 07 дек 2013, 23:40
Acterix
rezak90 писал(а):эх, ванга подвела... ошибка NullPointerException, контекст нуловый
Извечный русский вопрос: "что делать?". =)
Re: Урок 136. CursorLoader
Добавлено: 07 дек 2013, 23:53
rezak90
Acterix писал(а):rezak90 писал(а):эх, ванга подвела... ошибка NullPointerException, контекст нуловый
Извечный русский вопрос: "что делать?". =)
сделать то что делают нормальные люди) засунуть в приложение уже готовую бд ибо зачем в приложении держать данные что бы их потом запихнуть в бд?
Re: Урок 136. CursorLoader
Добавлено: 08 дек 2013, 00:49
Acterix
rezak90 писал(а):
сделать то что делают нормальные люди) засунуть в приложение уже готовую бд ибо зачем в приложении держать данные что бы их потом запихнуть в бд?
Действительно, что-то я перемудрил. Мне же не обязательно нужно чтобы работало заполнение бд. Привычка чтобы все работало. Благодарю за наставление на путь истинный =)
Re: Урок 136. CursorLoader
Добавлено: 08 дек 2013, 14:28
IgNa
Был такой урок - Урок 52. SimpleCursorAdapter
http://startandroid.ru/ru/uroki/vse-uro ... olzovanija
Там типа вначале пишут SimpleCursorAdapter умеет работать с TextView и ImageView компонентами и их производными, а Checkable-производные не воспримет. бла бла бла он устарел, используйте Урок 136. CursorLoader
Его как бы усовершенствовали и всё равно чекбокс не разместить ?
А если нет возможности вставить в листвью чекбокс, тогда зачем платить больше ?
SimpleCursorAdapter - forever
Re: Урок 136. CursorLoader
Добавлено: 08 дек 2013, 14:30
IgNa
А мне вот надо чекбоксы в листвью и в бд
Re: Урок 136. CursorLoader
Добавлено: 08 дек 2013, 14:31
rezak90
IgNa писал(а):А если нет возможности вставить в листвью чекбокс, тогда зачем платить больше ?
туда можно вставить любой контрол
Re: Урок 136. CursorLoader
Добавлено: 08 дек 2013, 14:35
IgNa
добавлю: потрать пару дней чтобы узнать как)
к новому году глядишь будет работать ..
Re: Урок 136. CursorLoader
Добавлено: 08 дек 2013, 14:36
IgNa
Foenix писал(а):Вопрос совершенно не по теме - тема о лоадерах.
Однако. КУрсор - это неизменяемая штука, поэтому использовать его с чекбоксом нельзя. К сожалению, придется перекинуть данные в массив и так работать.
Одни говорят можно, другие не можно .. не знаешь кого слушать
Re: Урок 136. CursorLoader
Добавлено: 08 дек 2013, 14:43
IgNa
rezak90, я правильно понял что и в SimpleCursorAdapter и в CursorLoader можно использовать чекбоксы, просто надо приспособится и конвертировать единички в true, а нули в false ?