9

Mam dwie tabele z relacji 1: 1, używam dostawcy zawartości i cursorloader.CursorLoader - Dwie tabele łączą zapytanie?

Jak utworzyć zapytanie łączące do pracy z programem ładującym kursor? Mogę to jakoś zhackować z dostawcą treści rawSql, ale jak to zrobić w konstruktorze programu ładującego kursor, jest poza mną.

Wielkie dzięki!

private static final String CREATE_TABLE_ARTICLES = "create table " 
      + TABLE_ARTICLES + "(" 
      + COLUMN_ARTICLE_ID + " integer primary key autoincrement, " 
      + COLUMN_URL + " text not null unique, " 
      + COLUMN_TITLE + " text not null, " 
      + COLUMN_PRICE + " text not null, " 
      + COLUMN_ADDED + " text not null, " 
      + COLUMN_IMG_URL + " text);"; 

    private static final String CREATE_TABLE_ARTICLE_DETAIL = "create table " 
      + TABLE_ARTICLE_DETAILS + "(" 
      + COLUMN_ARTICLE_DETAIL_ID + " integer primary key autoincrement, " 
      + COLUMN_DESC + " text not null, " 
      + COLUMN_LOCALITY + " text, " 
      + COLUMN_TYPE + " text not null, " 
      + COLUMN_SELLER + " text not null, " 
      + COLUMN_SELLER_PHONE + " text, " 
      + COLUMN_IMAGE_COUNT + " integer default 0, " 
      + COLUMN_ARTICLE + " integer, foreign key (" + COLUMN_ARTICLE + ") references " + TABLE_ARTICLES + "(" + COLUMN_ARTICLE_ID + "));"; 
+0

Jestem pewien, że będziemy potrzebować napisać surowego SQL do wykonania przyłącza. – Falmarri

+0

Jak napisać surowe zapytanie SQL podczas tworzenia programu Cursor Loader? Przyjmuje tylko te ciągi jako parametry (rzutowanie, wybór, itp.) http://developer.android.com/reference/android/content/CursorLoader.html – urSus

Odpowiedz

9

W rzeczywistości nie trzeba używać niestandardowego programu ładującego zadania. Jednym słowem, jednym z rozwiązań jest stworzenie URI "content: // AUTHORITY/TableArticlesWithDetail". Następnie w dostawcy treści sprawdź, czy to Uri i wykonaj surowy SQL, aby wykonać sprzężenie.

Aby uzyskać szczegółowe informacje, patrz how to use join query in CursorLoader when its constructor does not support it.

2

Najprostszym rozwiązaniem jest utworzenie widoku łączącego tabele i dostęp do widoku za pomocą narzędzia CursorLoader przy użyciu Uri.

0
Cursor c = db.query(
    RefuelTable.TABLE_NAME + " , " + ExpenseTable.TABLE_NAME, 
    Utils.concat(RefuelTable.PROJECTION, ExpenseTable.PROJECTION), 
    RefuelTable.EXP_ID + " = " + ExpenseTable.ID + " AND " + RuelTable.ID + " = " + id , 
    null, 
    null, 
    null, 
    null); 

nie podoba