2014-02-24 69 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库,并提供他们的罐子。