2012-09-18 23 views
19

ile sınırlayın sqlite db ile CursorLoader arasındaki verileri sorgulamaya çalışıyorum. Android geliştirici web sitesindeki dokümanları incelediğimde limit sorgusunu bulamıyorum.Sorguyu CursorLoader

CursorLoader(Context context, Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)

Nasıl CursorLoader içinde sınırı uygulayabilirsiniz?

Teşekkür peşin

cevap

28

hackish yol:

String sortOrder = "ROWID LIMIT 5" 

ORDER BY ROWID LIMIT 5 sonuçlanacaktır. ROWID, SQLite'nin devam ettiği örtük satır kimlikleriyle sıralar - bir sıralama belirtmezseniz ne olacağına çok yakındır. Bu, sağlanan parametrenin yalnızca geçerli bir sipariş türü olup olmadığını sipariş parametresinin kontrol etmediği gerçeğini kötüye kullanmak değil. Bir çeşit tampon taşma saldırısı.

Uri parametrelerini tanımlamanın daha iyi bir yolu olacaktır. ContentProvider sınırlamak için yukarıdaki deneme ile uyumlu olup olmadığını

// query code 
Uri queryUri = Uri.parse("content://what/ever/items"); 
queryUri = queryUri.buildUpon().appendQueryParameter("limit", "5").build(); 

// in ContentProvider 
String limit = queryUri.getQueryParameter("limit"); 

Her iki yaklaşım çalışacaktır. Aslında ContentProvider'dan belirli verileri sınırlamak veya seçmek için iyi tanımlanmış bir yol yoktur. Her bir ContentProvider, kendi sözleşmesiyle birlikte gelir, bu nedenle her sağlayıcıyla çalışmaz. buna son yol segmenti içindeki Sonra

Uri.withAppendedPath("uri" "/" + limitNumber); 

kullanma gibi

1

yılında Kimin LIMIT maddesini sahip olabilme yeteneği sağlar SQLiteQueryBuilder yöntemleri kullanabilirsiniz. Veya Sizin Seçim dizenize LIMIT ekleyebilirsin.
Ayrıca, uri (bunun bir parçası olarak) üzerinden limit sağlamak ve ContentProvider'da işlemek için bir seçenek var.
Şu an için herhangi bir API sağlamayan CursorLoader gibi görünüyor.

0

ben bu geç olduğunun farkındayım ama sandrstar bana ContentProvider geçtikleri bir Uri kullanmak ve sınırı eklemek için olan bir fikir verdi senin içerik sağlayıcı, sizin URI eşleştirici içinde son yol parçasını size URI eşleşti matchInt denetlemek ve alın, sorguda Sonra

MATCHER.addURI("authority", "uri" + "/#", matchInt); 

maç emin olun

uri.getLastPathSegment(); 

Sınırınız ne olacak ve sonra da SQLiteQueryBuilder ile tavsiye edilen sandrstarı kullanın.

Sadece parametrenizi Sağlayıcıya almak için iyi bir tekniğe sahip olmanın iyi olacağını düşündüm. Bu yardımcı olur umarım!