Урок 101. Создаем свой ContentProvider
Re: Урок 101. Создаем свой ContentProvider
Вебинар 2. Базы данных. ContentProvider-ы
http://www.youtube.com/watch?v=8rxH759rwP4
Удивился, что в уроке не было ссылки на видео.
http://www.youtube.com/watch?v=8rxH759rwP4
Удивился, что в уроке не было ссылки на видео.
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.
Свои сообщения можно редактировать - кнопка edit.
Re: Урок 101. Создаем свой ContentProvider
ну потому что это видео не имеет отношения к уроку, урок был написан задолго до того, как мы записали видео.
Обсудить видео можно тут viewtopic.php?f=60&t=2596
Обсудить видео можно тут viewtopic.php?f=60&t=2596
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 101. Создаем свой ContentProvider
А существуют ли какие-нибудь условия использования ContentProvider? Что-то вроде, если данные используются только в пределах приложения, что достаточно использовать Adapter.
Re: Урок 101. Создаем свой ContentProvider
Первая ссылка в гугле
http://developer.android.com/guide/topi ... iders.html
третий абзац
You don't need to develop your own provider if you don't intend to share your data with other applications. However, you do need your own provider to provide custom search suggestions in your own application. You also need your own provider if you want to copy and paste complex data or files from your application to other applications.
Однако, информация устарела "немного". Посему - его будет правильно использовать почти везде (за исключением каких-то крошечных, демонстрационных задачек)
http://developer.android.com/guide/topi ... iders.html
третий абзац
You don't need to develop your own provider if you don't intend to share your data with other applications. However, you do need your own provider to provide custom search suggestions in your own application. You also need your own provider if you want to copy and paste complex data or files from your application to other applications.
Однако, информация устарела "немного". Посему - его будет правильно использовать почти везде (за исключением каких-то крошечных, демонстрационных задачек)
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 101. Создаем свой ContentProvider
Доброго времени суток)
Пытаюсь написать контент провайдер по вашему уроку но с двумя таблицами.
И тормознул на методе query.
Начал писать так:
Меня интересует как теперь сформировать запрос на разные таблицы???
Заранее благодарю
Пытаюсь написать контент провайдер по вашему уроку но с двумя таблицами.
И тормознул на методе query.
Начал писать так:
Код: Выделить всё
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
// проверяем Uri
switch (uriMatcher.match(uri)) {
case URI_CATALOG:
// если сортировка не указана, ставим свою - по имени
if (TextUtils.isEmpty(sortOrder)) {
sortOrder = CATALOG_NAME + " ASC";
}
break;
case URI_CATALOG_ID:
String id = uri.getLastPathSegment();
// добавляем ID к условию выборки
if (TextUtils.isEmpty(selection)) {
selection = CATALOG_ID + " = " + id;
} else {
selection = selection + " AND " + CATALOG_ID + " = " + id;
}
break;
case URI_DATA:
if (TextUtils.isEmpty(sortOrder)){
sortOrder = DATA_NAME + " ASC";
}
break;
case URI_DATA_ID:
String dataid = uri.getLastPathSegment();
// добавляем ID к условию выборки
if (TextUtils.isEmpty(selection)) {
selection = DATA_ID + " = " + id;
} else {
selection = selection + " AND " + DATA_ID + " = " + id;
}
break;
default:
throw new IllegalArgumentException("Wrong URI: " + uri);
}
}
Заранее благодарю
Re: Урок 101. Создаем свой ContentProvider
погоди, ты вначале на одной таблице потренируйся. У тебя недореализован пока что этот метод. Ты формируешь selection и sortorder, а сам запрос нет. Когда реализуешь его, то, наверное, поймешь как делать запрос на другие таблицы.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 101. Создаем свой ContentProvider
Ну по сути я в принципе понял как это сделать нужно объявить переменную типа string и присвоить значение имени таблицы, а в запрос вставить уже переменную.
Правильно?
Правильно?
Re: Урок 101. Создаем свой ContentProvider
Код: Выделить всё
String tn = null;
...
tn = DATA_NAME;
...
Cursor cursor = db.query(tn, projection, selection,
selectionArgs, null, null, sortOrder);
Re: Урок 101. Создаем свой ContentProvider
зачем лишние переменные? первым параметром пиши свою data_name. Адля того, чтоб к другой таблице сделать запрос - пиши другую таблицу.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 101. Создаем свой ContentProvider
Что то я Вас не совсем понял, как это будет выглядеть "другая таблица"?
Re: Урок 101. Создаем свой ContentProvider
Примерно так???
[syntax=java] db = dbHelper.getWritableDatabase();
Cursor cursor = db.query(CATALOG_TABLE, projection, selection,
selectionArgs, null, null, sortOrder);
db = dbHelper.getWritableDatabase();
cursor = db.query(DATA_TABLE, projection, selection,
selectionArgs, null, null, sortOrder);
cursor.setNotificationUri(getContext().getContentResolver(),
CATALOG_CONTENT_URI);
return cursor;
cursor.setNotificationUri(getContext().getContentResolver(),
DATA_CONTENT_URI);
return cursor;[/syntax]
[syntax=java] db = dbHelper.getWritableDatabase();
Cursor cursor = db.query(CATALOG_TABLE, projection, selection,
selectionArgs, null, null, sortOrder);
db = dbHelper.getWritableDatabase();
cursor = db.query(DATA_TABLE, projection, selection,
selectionArgs, null, null, sortOrder);
cursor.setNotificationUri(getContext().getContentResolver(),
CATALOG_CONTENT_URI);
return cursor;
cursor.setNotificationUri(getContext().getContentResolver(),
DATA_CONTENT_URI);
return cursor;[/syntax]
Re: Урок 101. Создаем свой ContentProvider
нет.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 101. Создаем свой ContentProvider
Ткните пожалуйста носом))) что не так?
Re: Урок 101. Создаем свой ContentProvider
в каждый отдельно предназначенный для запроса пункт в операторе CASE после соответствующей метки нужно добавить вызов самого запроса, с параметрами .
а нотификацию посылать уже после оператора CASE и последний оператор RETURN так как у вас
а нотификацию посылать уже после оператора CASE и последний оператор RETURN так как у вас
Код: Выделить всё
cursor.setNotificationUri(getContext().getContentResolver(),
DATA_CONTENT_URI);
return cursor;
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 101. Создаем свой ContentProvider
Спасибо Вам)) Буду следующий метод разбирать.
Re: Урок 101. Создаем свой ContentProvider
Простите, но не понимаю... в ContentProvider мы создаем БД? а если БД есть (создана в одной Activity по 34-му уроку), как обращаться к ней из другой Activity?
Re: Урок 101. Создаем свой ContentProvider
CP- это способ доступа к БД. Обращаться с его помощью к БД можно из любой активити одинаково, не важно где она была создана.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 101. Создаем свой ContentProvider
Решил попробовать ContentProvider.
Для начала только упрощенный вариант: создать базу и посмотреть, что создалось
Провайдер:
MainActivity:
База создалась, но посмотреть ее не удалось
Вот логи:
Для начала только упрощенный вариант: создать базу и посмотреть, что создалось
Провайдер:
Код: Выделить всё
package alex.com.example.p_content_provider;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.net.Uri;
import android.util.Log;
public class MyProvider extends ContentProvider {
final String LOG_TAG = "myLogs";
SQLiteDatabase db;
public int delete(Uri arg0, String arg1, String[] arg2) {
// TODO Auto-generated method stub
return 0;
}
public String getType(Uri arg0) {
// TODO Auto-generated method stub
return null;
}
public Uri insert(Uri arg0, ContentValues arg1) {
// TODO Auto-generated method stub
return null;
}
public boolean onCreate() {
// TODO Auto-generated method stub
Log.d(LOG_TAG, "--- onCreate ---");
DBHelper dbH = new DBHelper(getContext());
SQLiteDatabase db = dbH.getWritableDatabase();
return false;
}
public Cursor query(Uri arg0, String[] arg1, String arg2, String[] arg3,
String arg4) {
// TODO Auto-generated method stub
Log.d(LOG_TAG, "--- query ---");
Cursor c = db.query("my_table", null, null, null, null, null, null);
return c;
}
public int update(Uri arg0, ContentValues arg1, String arg2, String[] arg3) {
// TODO Auto-generated method stub
return 0;
}
//=====================================================================
class DBHelper extends SQLiteOpenHelper {
public DBHelper(Context context) {
// конструктор суперкласса
super(context, "MyDB", null, 1);
}
public void onCreate(SQLiteDatabase db) {
// создаем таблицу с полями
db.execSQL("create table my_table ("
+ "_id integer primary key autoincrement,"
+ "field1 text,"
+ "field2 text,"
+ "field3 text" + ");");
ContentValues cv = new ContentValues();
cv.put("field1", "1");
cv.put("field2", "11");
cv.put("field3", "111");
// вставляем запись и получаем ее ID
long rowID = db.insert("my_table", null, cv);
cv.put("field1", "2");
cv.put("field2", "22");
cv.put("field3", "222");
// вставляем запись и получаем ее ID
rowID = db.insert("my_table", null, cv);
Log.d(LOG_TAG, "--- NEW ---");
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
//=====================================================================
}
Код: Выделить всё
package alex.com.example.p_content_provider;
import android.app.Activity;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
public class MainActivity extends Activity {
final String LOG_TAG = "myLogs";
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(LOG_TAG, "--- app start---");
final Uri CONTACT_URI = Uri.parse("content://alex.com.example");
Cursor c = getContentResolver().query(CONTACT_URI, null, null,null, null);
Log.d(LOG_TAG, "--- get cursor ---");
}
}
Вот логи:
Код: Выделить всё
08-07 12:10:29.870: D/myLogs(25782): --- NEW ---
08-07 12:10:29.960: D/myLogs(25782): --- app start---
08-07 12:10:29.960: D/myLogs(25782): --- query ---
08-07 12:10:29.960: D/AndroidRuntime(25782): Shutting down VM
08-07 12:10:29.960: W/dalvikvm(25782): threadid=1: thread exiting with uncaught exception (group=0x409961f8)
08-07 12:10:29.980: E/AndroidRuntime(25782): FATAL EXCEPTION: main
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 101. Создаем свой ContentProvider
Логи не полные.
Учитесь читать логи viewtopic.php?f=60&t=3198
Учитесь читать логи viewtopic.php?f=60&t=3198
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Урок 101. Создаем свой ContentProvider
Вот полные логи:
Код: Выделить всё
08-08 04:45:47.006: D/myLogs(769): --- onCreate ---
08-08 04:45:47.126: D/myLogs(769): --- NEW ---
08-08 04:45:47.236: D/myLogs(769): --- app start---
08-08 04:45:47.236: D/myLogs(769): --- query ---
08-08 04:45:47.246: D/AndroidRuntime(769): Shutting down VM
08-08 04:45:47.246: W/dalvikvm(769): threadid=1: thread exiting with uncaught exception (group=0x409961f8)
08-08 04:45:47.255: E/AndroidRuntime(769): FATAL EXCEPTION: main
08-08 04:45:47.255: E/AndroidRuntime(769): java.lang.RuntimeException: Unable to start activity ComponentInfo{alex.com.example.p_content_provider/alex.com.example.p_content_provider.MainActivity}: java.lang.NullPointerException
08-08 04:45:47.255: E/AndroidRuntime(769): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955)
08-08 04:45:47.255: E/AndroidRuntime(769): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
08-08 04:45:47.255: E/AndroidRuntime(769): at android.app.ActivityThread.access$600(ActivityThread.java:122)
08-08 04:45:47.255: E/AndroidRuntime(769): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146)
08-08 04:45:47.255: E/AndroidRuntime(769): at android.os.Handler.dispatchMessage(Handler.java:99)
08-08 04:45:47.255: E/AndroidRuntime(769): at android.os.Looper.loop(Looper.java:137)
08-08 04:45:47.255: E/AndroidRuntime(769): at android.app.ActivityThread.main(ActivityThread.java:4340)
08-08 04:45:47.255: E/AndroidRuntime(769): at java.lang.reflect.Method.invokeNative(Native Method)
08-08 04:45:47.255: E/AndroidRuntime(769): at java.lang.reflect.Method.invoke(Method.java:511)
08-08 04:45:47.255: E/AndroidRuntime(769): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
08-08 04:45:47.255: E/AndroidRuntime(769): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
08-08 04:45:47.255: E/AndroidRuntime(769): at dalvik.system.NativeStart.main(Native Method)
08-08 04:45:47.255: E/AndroidRuntime(769): Caused by: java.lang.NullPointerException
08-08 04:45:47.255: E/AndroidRuntime(769): at alex.com.example.p_content_provider.MyProvider.query(MyProvider.java:47)
08-08 04:45:47.255: E/AndroidRuntime(769): at android.content.ContentProvider$Transport.query(ContentProvider.java:178)
08-08 04:45:47.255: E/AndroidRuntime(769): at android.content.ContentResolver.query(ContentResolver.java:310)
08-08 04:45:47.255: E/AndroidRuntime(769): at alex.com.example.p_content_provider.MainActivity.onCreate(MainActivity.java:22)
08-08 04:45:47.255: E/AndroidRuntime(769): at android.app.Activity.performCreate(Activity.java:4465)
08-08 04:45:47.255: E/AndroidRuntime(769): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
08-08 04:45:47.255: E/AndroidRuntime(769): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)
08-08 04:45:47.255: E/AndroidRuntime(769): ... 11 more