2010-07-24 65 views
14

我有一個自定義ContentProvider,用於將從GPS獲得的修復程序存儲到SQLite數據庫中。這個類覆蓋了ContentProvider方法(刪除,插入,查詢...),但注意我還包含了一個查詢最後修正的方法。Android:在ContentProvider中調用自定義方法

public class FixesContentProvider extends ContentProvider { 
    @Override 
    public int delete(...) { ... } 
    ... 
    @Override 
    public Cursor query(...) { ... } 

    public Cursor getLastFix(Uri uri) { ... } 
} 

這是很容易通過調用getContentResolver()查詢到其他服務或活動的數據。

ContentResolver cR = getContentResolver(); 
Cursor fixes = cR.query(CONTENT_URI, ...); 

但我無法調用我的自定義方法(FixesContentProvider#getLastFix)。 我怎樣才能調用ContentProvider中定義的自定義方法?

也許我不明白ContentProvider/ContentResolver如何在這種情況下工作,但官方的Android documentation provided by Google在這個意義上不是很明確。

回答

13

但我無法調用我的自定義方法(FixesContentProvider#getLastFix)。

這是完全正確的。在這種情況下,您可以利用一個事實:querygetLastFix方法都會返回Cursor對象。所以,我所做的就是爲您傳遞給query的URI添加一些值,然後決定您想要實際執行的操作:querygetLastFix。例如:

public Cursor query(Uri uri,...) { 
    if (uri says it has to return the last fix) 
     return getLastFix(uri); 
    // otherwise, do normal operations... 
    return cursor; 
} 

事實上,query方法是假設返回結果,給定一個Uri。因此,如果您需要檢索最後一次修復,則必須在URI中指定您想要的最後一次修復。

+0

這就是我所做的。我使用UriMatcher.addUri將「content:// xxx/fixes」和「content:// xxx/fixes/last」與兩個不同的代碼進行匹配,並在交換機中執行相應操作(myUriMatcher.match( uri)){case CODE_1:xxx; case CODE_2:yyy; }。非常感謝你。 – 2010-07-24 19:20:03