2014-02-24 106 views
1

我創建一個ContentProvider和理解,我需要與客戶分享的URI格式。 Lars Vogella's tutorial包括:如何共享公共的URI的ContentProvider

public class MyTodoContentProvider extends ContentProvider { 
     public static final String CONTENT_TYPE = ContentResolver.CURSOR_DIR_BASE_TYPE + "/todos"; 
     public static final String CONTENT_ITEM_TYPE = ContentResolver.CURSOR_ITEM_BASE_TYPE + "/todo"; 

     @Override 
     public Cursor query(Uri uri, String[] projection, String selection, 
     String[] selectionArgs, String sortOrder) { 
     : 
     } 

     : 
    } 

這似乎是一個抽象的違反,因爲我想分享這些常量定義,但不是服務請求的代碼。有人推薦將它們放入一個只定義常量的公共抽象類中嗎? (偉大的喬希布洛赫建議不要使用接口用於此目的。)

在任何情況下,我怎麼打包的常量,使客戶可以看到他們?如果我編寫客戶端應用程序,我可以鏈接定義常量的類,但它們對其他客戶端的可見性如何?我可以上傳我的常量類嗎?任何人都可以下載並鏈接它?

(在實踐中,沒人會想用我的內容提供商,這我創建了大學課程,但我想教我的學生的最佳實踐。)

+1

如果你教CS,你可能有興趣在http://cseducators.stackexchange.com(雖然因爲它仍然處於內部測試階段,這是最容易進入經過這裏https://area51.stackexchange.com/proposals/92460 /計算機科學教育工作者) –

+0

@ BenI。你的評論使我成爲這個團體的活躍分子,並努力招募他人。謝謝。 –

回答

2

您可以創建一個合同類,像在Android的API做的,例如爲觸點,當你定義的內容類型,內容URI,字段等:

http://developer.android.com/reference/android/provider/ContactsContract.html

對於執行情況,有效的Java項目#19建議,你可以創建一個「正常」類:

public class MyTodoContract { 

    private MyTodoContract() {} 

    public static final String CONTENT_TYPE = ContentResolver.CURSOR_DIR_BASE_TYPE + "/todos"; 

    public static final String CONTENT_ITEM_TYPE = ContentResolver.CURSOR_ITEM_BASE_TYPE + "/todo"; 
} 

如果要提供這個類你的客戶,你應該創建一個Java庫,並提供他們的罐子。