2013-01-16 11 views
5

Poznaję SQLite w Androidzie. Dla SQLite odwołuję się do developer.android.com. Ale dostałem trochę pomieszania podczas czytania kodu. Napisano konstruktor FeedReaderContract, aby uniemożliwić utworzenie instancji klasy FeedReaderContract, ale nie definiują one klasy FeedReaderContract w dowolnym miejscu i relacji między FeedReaderContract i FeedEntry.Jaki jest cel FeedReaderContract i jak zdefiniować klasę wewnętrzną w klasie OpenHelper

Here's link do której się odnawiam. Dostarczam kod. Jak zdefiniować klasę wewnętrzną w klasie openhelper? Czy ktokolwiek mógłby zaproponować mi dobrą drogę ?.

Na przykład ten fragment określa nazwę tabeli i nazwy kolumn dla pojedynczej tabeli:

public static abstract class FeedEntry implements BaseColumns 
{ 
    public static final String TABLE_NAME = "entry"; 
    public static final String COLUMN_NAME_ENTRY_ID = "entryid"; 
    public static final String COLUMN_NAME_TITLE = "title"; 
    public static final String COLUMN_NAME_SUBTITLE = "subtitle"; 
    ... 
} 

Aby uniemożliwić przypadkowe instancji klasy zamówienia, nadać mu pustego konstruktora.

//Prevents the FeedReaderContract class from being instantiated. 
private FeedReaderContract() {} 
+0

Nie mogę zrozumieć twojego pytania. Jaki kod chcesz wyjaśnić? Kod w łączonym artykule jest wyjaśniony w artykule. (Na przykład w artykule opisano pierwszą cytowaną sekcję kodu "ten fragment definiuje nazwę tabeli i nazwy kolumn dla pojedynczej tabeli." Co jeszcze chciałbyś wiedzieć?) –

+0

Podałem pewne znaczenie Twojemu tytułowi pytania. Zachęcamy do wycofania, jeśli nie zadowoli to twojego pytania. –

Odpowiedz

4

rozumiem jak:

public static class FeedReaderContract{ 

    // Prevents the FeedReaderContract class from being instantiated. 
    private FeedReaderContract() {} 

    //The FeedEntry table definition 
    public static abstract class FeedEntry implements BaseColumns { 
     public static final String TABLE_NAME = "entry"; 
     public static final String COLUMN_NAME_ENTRY_ID = "entryid"; 
     public static final String COLUMN_NAME_TITLE = "title"; 
     public static final String COLUMN_NAME_SUBTITLE = "subtitle"; 
     ... 
    } 

    //more tables definition 
} 

Nie można więc instatiate umowy, ale można uzyskać dostęp do wszystkich wewnętrznych Stałe klas. Podobnie jak w przykładzie line:

private static final String SQL_CREATE_ENTRIES = 
"CREATE TABLE " + FeedReaderContract.FeedEntry.TABLE_NAME + " (" + 
FeedReaderContract.FeedEntry._ID + " INTEGER PRIMARY KEY," //continues 

dostępu do FeedEntry stałych (TABLE_NAME i _ID) wewnętrznej klasy w FeedReaderContract klasy.

Mam nadzieję, że to pomaga.