Урок 136. CursorLoader

Обсуждение уроков
Аватара пользователя
Akella
Сообщения: 42
Зарегистрирован: 05 ноя 2013, 12:55
Откуда: UA
Контактная информация:

Re: Урок 136. CursorLoader

Сообщение Akella » 27 ноя 2013, 00:08

У меня проблема в 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\", правильно ли?

Аватара пользователя
Akella
Сообщения: 42
Зарегистрирован: 05 ноя 2013, 12:55
Откуда: UA
Контактная информация:

Re: Урок 136. CursorLoader

Сообщение Akella » 27 ноя 2013, 00:11

item.xml перенёс в папку layout, на видео увидел

qualitat1ve
Сообщения: 6
Зарегистрирован: 18 фев 2013, 10:55

Re: Урок 136. CursorLoader

Сообщение qualitat1ve » 27 ноя 2013, 18:50

Может кто подсказать кто дергает колбек onLoaderReset и как его обрабатывать?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 136. CursorLoader

Сообщение Foenix » 27 ноя 2013, 19:20

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/
R.id.team

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

Аватара пользователя
Nialon
Сообщения: 22
Зарегистрирован: 12 ноя 2013, 19:19

Re: Урок 136. CursorLoader

Сообщение Nialon » 29 ноя 2013, 18:15

Мне интересно сколько модеров обслуживают тему уроков.
Иногда возникает какой-то мелочный вопрос, а там засор по полной.
Дикую модерацию по удалению не пробовали?

rezak90 уже сбежал от проблем на R.id.team

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 136. CursorLoader

Сообщение rezak90 » 29 ноя 2013, 19:22

Nialon писал(а):rezak90 уже сбежал от проблем на R.id.team
Я сбежал потому что на форуме нету модераторов, а извините меня разгребать из срача нормальные адекватные вопросы не хочется ибо я трачу на это своё время.
R.id.team
Политика на форуме запрещена

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Урок 136. CursorLoader

Сообщение KamiSempai » 29 ноя 2013, 22:24

Тут все на чистом энтузиазме работает. Модератор на форуме один - это damager82.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Acterix
Сообщения: 7
Зарегистрирован: 17 ноя 2013, 15:56

Re: Урок 136. CursorLoader

Сообщение Acterix » 07 дек 2013, 21:52

Код: Выделить всё

 // создаем и заполняем БД
    @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) {
		}
    }
  }
Последний раз редактировалось Acterix 07 дек 2013, 22:13, всего редактировалось 1 раз.

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 136. CursorLoader

Сообщение rezak90 » 07 дек 2013, 22:09

Acterix писал(а):Если нужно что-то еще показать, говорите.
логи
P.S. вангую что там IndexOfBoundException
R.id.team
Политика на форуме запрещена

Acterix
Сообщения: 7
Зарегистрирован: 17 ноя 2013, 15:56

Re: Урок 136. CursorLoader

Сообщение Acterix » 07 дек 2013, 22:21

Код: Выделить всё

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

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 136. CursorLoader

Сообщение rezak90 » 07 дек 2013, 22:47

эх, ванга подвела... ошибка NullPointerException, контекст нуловый
R.id.team
Политика на форуме запрещена

Acterix
Сообщения: 7
Зарегистрирован: 17 ноя 2013, 15:56

Re: Урок 136. CursorLoader

Сообщение Acterix » 07 дек 2013, 23:40

rezak90 писал(а):эх, ванга подвела... ошибка NullPointerException, контекст нуловый
Извечный русский вопрос: "что делать?". =)

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 136. CursorLoader

Сообщение rezak90 » 07 дек 2013, 23:53

Acterix писал(а):
rezak90 писал(а):эх, ванга подвела... ошибка NullPointerException, контекст нуловый
Извечный русский вопрос: "что делать?". =)
сделать то что делают нормальные люди) засунуть в приложение уже готовую бд ибо зачем в приложении держать данные что бы их потом запихнуть в бд?
R.id.team
Политика на форуме запрещена

Acterix
Сообщения: 7
Зарегистрирован: 17 ноя 2013, 15:56

Re: Урок 136. CursorLoader

Сообщение Acterix » 08 дек 2013, 00:49

rezak90 писал(а): сделать то что делают нормальные люди) засунуть в приложение уже готовую бд ибо зачем в приложении держать данные что бы их потом запихнуть в бд?
Действительно, что-то я перемудрил. Мне же не обязательно нужно чтобы работало заполнение бд. Привычка чтобы все работало. Благодарю за наставление на путь истинный =)

Аватара пользователя
IgNa
Сообщения: 345
Зарегистрирован: 30 сен 2013, 12:18

Re: Урок 136. CursorLoader

Сообщение IgNa » 08 дек 2013, 14:28

Был такой урок - Урок 52. SimpleCursorAdapter http://startandroid.ru/ru/uroki/vse-uro ... olzovanija

Там типа вначале пишут SimpleCursorAdapter умеет работать с TextView и ImageView компонентами и их производными, а Checkable-производные не воспримет. бла бла бла он устарел, используйте Урок 136. CursorLoader

Его как бы усовершенствовали и всё равно чекбокс не разместить ?
А если нет возможности вставить в листвью чекбокс, тогда зачем платить больше ?
SimpleCursorAdapter - forever
Изображение

Аватара пользователя
IgNa
Сообщения: 345
Зарегистрирован: 30 сен 2013, 12:18

Re: Урок 136. CursorLoader

Сообщение IgNa » 08 дек 2013, 14:30

А мне вот надо чекбоксы в листвью и в бд :cry:
Изображение

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 136. CursorLoader

Сообщение rezak90 » 08 дек 2013, 14:31

IgNa писал(а):А если нет возможности вставить в листвью чекбокс, тогда зачем платить больше ?
туда можно вставить любой контрол
R.id.team
Политика на форуме запрещена

Аватара пользователя
IgNa
Сообщения: 345
Зарегистрирован: 30 сен 2013, 12:18

Re: Урок 136. CursorLoader

Сообщение IgNa » 08 дек 2013, 14:35

добавлю: потрать пару дней чтобы узнать как)
к новому году глядишь будет работать ..
Последний раз редактировалось IgNa 08 дек 2013, 14:39, всего редактировалось 1 раз.
Изображение

Аватара пользователя
IgNa
Сообщения: 345
Зарегистрирован: 30 сен 2013, 12:18

Re: Урок 136. CursorLoader

Сообщение IgNa » 08 дек 2013, 14:36

Foenix писал(а):Вопрос совершенно не по теме - тема о лоадерах.
Однако. КУрсор - это неизменяемая штука, поэтому использовать его с чекбоксом нельзя. К сожалению, придется перекинуть данные в массив и так работать.
Одни говорят можно, другие не можно .. не знаешь кого слушать
Изображение

Аватара пользователя
IgNa
Сообщения: 345
Зарегистрирован: 30 сен 2013, 12:18

Re: Урок 136. CursorLoader

Сообщение IgNa » 08 дек 2013, 14:43

rezak90, я правильно понял что и в SimpleCursorAdapter и в CursorLoader можно использовать чекбоксы, просто надо приспособится и конвертировать единички в true, а нули в false ?
Изображение

Ответить