Урок 136. CursorLoader

Обсуждение уроков
Аватара пользователя
alexmx
Сообщения: 193
Зарегистрирован: 10 мар 2014, 08:14

Re: Урок 136. CursorLoader

Сообщение alexmx » 12 май 2014, 20:10

Доброго времени суток
Есть два ListView как организовать в фрагменте CursorLoader с загрузкой из двух таблиц.
Понял что надо инициализировать два лоадера с двумя id
в onCreatLoader получаем id проверяем что пришло и возвращаем нужный лоадер.
А как дальше процесс происходит?

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

Re: Урок 136. CursorLoader

Сообщение Foenix » 12 май 2014, 20:13

тебе точно два курсора надо?
R.id.team

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

Аватара пользователя
alexmx
Сообщения: 193
Зарегистрирован: 10 мар 2014, 08:14

Re: Урок 136. CursorLoader

Сообщение alexmx » 12 май 2014, 20:14

А как потом определить какой адаптер прикручивать?

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

Re: Урок 136. CursorLoader

Сообщение Foenix » 12 май 2014, 20:24

что значит "а как", я ж не такой вопрос задала. У тебя один список будет на экране или два
R.id.team

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

Аватара пользователя
alexmx
Сообщения: 193
Зарегистрирован: 10 мар 2014, 08:14

Re: Урок 136. CursorLoader

Сообщение alexmx » 12 май 2014, 20:26

два

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

Re: Урок 136. CursorLoader

Сообщение Foenix » 12 май 2014, 20:28

ок
дальше все просто - нужно лишь реализовать паттерн с лоадерами)
вебинар посмотри -там все есть, это раз.
при реализации из фрагментов - следи за правильными импортами - либо саппорт либа, либо обычная.
R.id.team

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

Аватара пользователя
alexmx
Сообщения: 193
Зарегистрирован: 10 мар 2014, 08:14

Re: Урок 136. CursorLoader

Сообщение alexmx » 12 май 2014, 20:33

Вебинар про контент провайдеры?

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

Re: Урок 136. CursorLoader

Сообщение Foenix » 12 май 2014, 20:40

да
R.id.team

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

Аватара пользователя
alexmx
Сообщения: 193
Зарегистрирован: 10 мар 2014, 08:14

Re: Урок 136. CursorLoader

Сообщение alexmx » 12 май 2014, 20:47

посмотрел)))

Аватара пользователя
alexmx
Сообщения: 193
Зарегистрирован: 10 мар 2014, 08:14

Re: Урок 136. CursorLoader

Сообщение alexmx » 12 май 2014, 20:58

Примерно так:
[syntax=java]@Override
public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {
switch (arg0) {
case 0:
CursorLoader cl0 = new CursorLoader(getActivity(), uri, projection, selection, selectionArgs, sortOrder);
return cl0;

case 1:
CursorLoader cl1 = new CursorLoader(getActivity(), uri, projection, selection, selectionArgs, sortOrder);
return cl1;
default:

}

}

@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor arg1) {
switch (loader.getId()) {
case 0:
adapter.swapCursor(arg1);
break;
case 1:
adapter.swapCursor(arg1);
break;

default:
break;
}

}

@Override
public void onLoaderReset(Loader<Cursor> loader) {
switch (loader.getId()) {
case 0:
adapter.swapCursor(null);
break;
case 1:
adapter.swapCursor(null);
break;

default:
break;
}

}[/syntax]

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

Re: Урок 136. CursorLoader

Сообщение Foenix » 12 май 2014, 22:09

:)
ты сам посмотри что ты написал
R.id.team

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

Аватара пользователя
alexmx
Сообщения: 193
Зарегистрирован: 10 мар 2014, 08:14

Re: Урок 136. CursorLoader

Сообщение alexmx » 13 май 2014, 14:44

А что не так? Это ж примерно)))

Аватара пользователя
alexmx
Сообщения: 193
Зарегистрирован: 10 мар 2014, 08:14

Re: Урок 136. CursorLoader

Сообщение alexmx » 13 май 2014, 14:54

[syntax=java]@Override
public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {
CursorLoader cursorLoader = null;
switch (arg0) {
case 0:
cursorLoader = new CursorLoader(getActivity(), URI_TOOL, null, null, null, null);
break;
case 1:
cursorLoader = new CursorLoader(getActivity(), URI_DATA, null, null, null, null);
break;
default:

}
return cursorLoader;
}[/syntax]
Не ругайся)))

Аватара пользователя
alexmx
Сообщения: 193
Зарегистрирован: 10 мар 2014, 08:14

Re: Урок 136. CursorLoader

Сообщение alexmx » 13 май 2014, 15:10

Я фанат твоих вебинаров :lol: :mrgreen: :geek:

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

Re: Урок 136. CursorLoader

Сообщение Foenix » 13 май 2014, 15:40

так ты смотри же в предыдущем коде - сказал, что будет два списка, а сам пишешь adapter
и второй кусок то же самое.
R.id.team

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

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

Re: Урок 136. CursorLoader

Сообщение Foenix » 13 май 2014, 15:41

alexmx писал(а):Я фанат твоих вебинаров :lol: :mrgreen: :geek:
у меня пока один)
ридтим мне не доверяет - говорит кроме к.п. я не знаю ничего
R.id.team

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

Аватара пользователя
alexmx
Сообщения: 193
Зарегистрирован: 10 мар 2014, 08:14

Re: Урок 136. CursorLoader

Сообщение alexmx » 13 май 2014, 15:47

Про адаптер я в курсе, я их не кастомизировал еще.
у меня пока один)
ридтим мне не доверяет - говорит кроме к.п. я не знаю ничего
Ну значит фанат одного вебинара :D

Аватара пользователя
alexmx
Сообщения: 193
Зарегистрирован: 10 мар 2014, 08:14

Re: Урок 136. CursorLoader

Сообщение alexmx » 14 май 2014, 18:55

В общем сделал лоадер:
[syntax=java]package ru.systemtehnolodgi.stav;

import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.app.Fragment;
import android.app.LoaderManager;
import android.app.LoaderManager.LoaderCallbacks;
import android.content.CursorLoader;
import android.content.Loader;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.TextView;


public class Launcher extends Fragment implements LoaderCallbacks<Cursor>{

final static Uri URI_TOOL = Uri.parse("content://ru.htsprovider.htspdata/dataplasma");
static final Uri URI_DATA = Uri.parse("content://ru.htsprovider.htspdata/datatable");

static final String PARAMETR_NAME_PLASMA = "parameter_name_plasma";
static final String STRAIGHT_CUT = "straight_cut";
static final String OBLIQUE_CUT_TOP = "oblique_cut_top";
static final String OBLIQUE_CUT_LOWER = "oblique_cut_lower";
static final String MARKING = "marcing";
static final String PUNCHING = "punching";
static final String QUALITY_HOLE = "quality_hole";

public Launcher() {
}
LauncherToolAdapter adapter;
android.app.LoaderManager loaderManager;
private LoaderManager.LoaderCallbacks<Cursor> mCallbacks;
ListView lvTool;
ListView lvData;
TextView textView;
CursorLoader cursorLoader;


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {

String[] from = new String[] { PARAMETR_NAME_PLASMA, STRAIGHT_CUT, OBLIQUE_CUT_TOP, OBLIQUE_CUT_LOWER, MARKING, PUNCHING, QUALITY_HOLE};
adapter = new LauncherToolAdapter(getActivity(), R.layout.item_tool, null, from, null);
lvTool = (ListView) getActivity().findViewById(R.id.lvLauncherTool);
//lvTool.setAdapter(adapter);

mCallbacks = this;
loaderManager = getActivity().getLoaderManager();
loaderManager.initLoader(0, null, mCallbacks);
//loaderManager.initLoader(1, null, mCallbacks);

View rootViewLauncher = inflater.inflate(R.layout.fragment_launcher, container, false);
return rootViewLauncher;
}



@Override
public Loader<Cursor> onCreateLoader(int id, Bundle arg1) {

switch (id) {
case 0:
cursorLoader = new CursorLoader(getActivity(), URI_TOOL, null, null, null, null);
break;
case 1:
cursorLoader = new CursorLoader(getActivity(), URI_DATA, null, null, null, null);
break;
default:
break;
}
return cursorLoader;
}

@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
switch (loader.getId()) {
case 0:
adapter.swapCursor(cursor);
break;
case 1:
adapter.swapCursor(cursor);
break;

default:
break;
}
}

@Override
public void onLoaderReset(Loader<Cursor> loader) {
switch (loader.getId()) {
case 0:
adapter.swapCursor(null);
break;
case 1:
adapter.swapCursor(null);
break;
default:
break;
}
}
}
[/syntax]
Не проканал, лог:
05-14 15:39:48.679: E/AndroidRuntime(14349): FATAL EXCEPTION: main
05-14 15:39:48.679: E/AndroidRuntime(14349): java.lang.IllegalArgumentException: column 'parameter_name_plasma' does not exist
05-14 15:39:48.679: E/AndroidRuntime(14349): at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:302)
05-14 15:39:48.679: E/AndroidRuntime(14349): at android.database.CursorWrapper.getColumnIndexOrThrow(CursorWrapper.java:78)
05-14 15:39:48.679: E/AndroidRuntime(14349): at android.widget.SimpleCursorAdapter.findColumns(SimpleCursorAdapter.java:333)
05-14 15:39:48.679: E/AndroidRuntime(14349): at android.widget.SimpleCursorAdapter.swapCursor(SimpleCursorAdapter.java:345)
05-14 15:39:48.679: E/AndroidRuntime(14349): at ru.systemtehnolodgi.stav.Launcher.onLoadFinished(Launcher.java:80)
05-14 15:39:48.679: E/AndroidRuntime(14349): at ru.systemtehnolodgi.stav.Launcher.onLoadFinished(Launcher.java:1)
05-14 15:39:48.679: E/AndroidRuntime(14349): at android.app.LoaderManagerImpl$LoaderInfo.callOnLoadFinished(LoaderManager.java:482)
05-14 15:39:48.679: E/AndroidRuntime(14349): at android.app.LoaderManagerImpl$LoaderInfo.onLoadComplete(LoaderManager.java:450)
05-14 15:39:48.679: E/AndroidRuntime(14349): at android.content.Loader.deliverResult(Loader.java:143)
05-14 15:39:48.679: E/AndroidRuntime(14349): at android.content.CursorLoader.deliverResult(CursorLoader.java:113)
05-14 15:39:48.679: E/AndroidRuntime(14349): at android.content.CursorLoader.deliverResult(CursorLoader.java:43)
05-14 15:39:48.679: E/AndroidRuntime(14349): at android.content.AsyncTaskLoader.dispatchOnLoadComplete(AsyncTaskLoader.java:254)
05-14 15:39:48.679: E/AndroidRuntime(14349): at android.content.AsyncTaskLoader$LoadTask.onPostExecute(AsyncTaskLoader.java:91)
05-14 15:39:48.679: E/AndroidRuntime(14349): at android.os.AsyncTask.finish(AsyncTask.java:631)
05-14 15:39:48.679: E/AndroidRuntime(14349): at android.os.AsyncTask.access$600(AsyncTask.java:177)
05-14 15:39:48.679: E/AndroidRuntime(14349): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
05-14 15:39:48.679: E/AndroidRuntime(14349): at android.os.Handler.dispatchMessage(Handler.java:99)
05-14 15:39:48.679: E/AndroidRuntime(14349): at android.os.Looper.loop(Looper.java:137)
05-14 15:39:48.679: E/AndroidRuntime(14349): at android.app.ActivityThread.main(ActivityThread.java:4745)
05-14 15:39:48.679: E/AndroidRuntime(14349): at java.lang.reflect.Method.invokeNative(Native Method)
05-14 15:39:48.679: E/AndroidRuntime(14349): at java.lang.reflect.Method.invoke(Method.java:511)
05-14 15:39:48.679: E/AndroidRuntime(14349): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)

Насколько я понял в адаптер попадает курсор который не имеет поля parameter_name_plasma
Почему такое может быть?

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

Re: Урок 136. CursorLoader

Сообщение Foenix » 14 май 2014, 19:21

что у тебя в курсор выдается-то?
R.id.team

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

Аватара пользователя
alexmx
Сообщения: 193
Зарегистрирован: 10 мар 2014, 08:14

Re: Урок 136. CursorLoader

Сообщение alexmx » 14 май 2014, 19:22

Задумался но не помогло)))

Ответить