首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android原理图内容提供器库配置?

Android原理图内容提供器库配置?
EN

Stack Overflow用户
提问于 2014-09-30 19:53:59
回答 2查看 3.7K关注 0票数 6

talk在最近的一次演讲中提到了这个库,它看起来是一个很好的避免样板文件的方法,所以我试了试。但没有任何成功。https://github.com/SimonVT/schematic

下面是带有注释和清单提供程序元素的内容提供程序的定义。问题是Android Studio不喜欢provider定义,因为content provider类没有扩展ContentProvider。

代码语言:javascript
复制
Caused by: java.lang.ClassCastException: com.myapp.SchematicContentProvider
cannot be cast to android.content.ContentProvider

我遗漏了什么?它可能与我没有使用的android-apt有关(原理图推荐它,但似乎不需要它)-当我尝试使用android-apt时,我得到了一个VerifyError,所以不得不从构建中删除它。

AndroidManifest.xml

代码语言:javascript
复制
    <provider
        android:name="com.myapp.SchematicContentProvider"
        android:authorities="com.myapp.provider"
        android:exported="false" />

和类的定义:

代码语言:javascript
复制
import net.simonvt.schematic.annotation.ContentProvider;
import net.simonvt.schematic.annotation.ContentUri;
import net.simonvt.schematic.annotation.TableEndpoint;

@ContentProvider(authority = SchematicContentProvider.AUTHORITY, database = SchematicDatabase.class)
public class SchematicContentProvider {

    public static final String AUTHORITY = "com.myapp.provider";

    interface Path {
        String ROUTES = "routes";
    }

    @TableEndpoint(table = SchematicDatabase.ROUTES) public static class Routes {

        @ContentUri(path = Path.ROUTES, type = "vnd.android.cursor.dir/list", defaultSort = SchematicRouteColumns.TITLE + " ASC")
        public static final Uri ROUTES = Uri.parse("content://" + AUTHORITY + "/" + Path.ROUTES );
    }

}

我已经浏览了原理图示例应用程序(自述文件中的代码片段是部分代码),但我看不到我遗漏了什么。我不确定如何确认代码生成正在工作,如何检查?我在build下查看,但只在原理图包名下看到了BuildConfig。

很遗憾,它不适合我,它有很大的潜力。

EN

回答 2

Stack Overflow用户

发布于 2015-05-28 15:27:51

您没有声明正确的ContentProvider。您必须在Manifest中声明生成的清单。我喜欢这样:

代码语言:javascript
复制
<provider
    android:name=".yourOptionalPackage.generated.SchematicContentProvider"
    android:authorities="com.myapp.provider"
    android:exported="false" />

如果您的IDE (Android Studio/IntelliJ)显示红色警告,只需单击Make Project按钮即可生成代码。

如果它仍然不起作用,在你的项目中包含apt-libs (值得),为了节省更多的时间,也可以基于apt-lib使用this awesome library ;)

在评论中让我知道我是否解决了你的问题,以及你是否需要配置gradle文件的帮助。

票数 6
EN

Stack Overflow用户

发布于 2015-06-04 20:14:22

您收到此错误是因为com.myapp.SchematicContentProvider是您的带注释的类,而不是生成的ContentProvider (将具有相同的名称)。

Louis Cognault给出了正确的答案,但是值得一提的是Schematic为@ContentProvider@Database注释提供了一个特殊的参数packageNamepackageName定义了生成的类的放置位置。它让您了解如何创建AndroidManifest.xml

提供程序定义类:

代码语言:javascript
复制
@ContentProvider(
    authority = SchematicContentProvider.AUTHORITY, 
    database = SchematicDatabase.class,
    packageName = "com.myapp.providerpackage")
public class SchematicContentProvider {
    ...
}

数据库定义类:

代码语言:javascript
复制
@Database(
        version = SchematicDatabase.VERSION,
        packageName = "com.myapp.providerpackage"
)
public class SchematicDatabase{
    public static final int VERSION = 1;
...
}

AndroidManifest.xml:

代码语言:javascript
复制
<provider
    android:name="com.myapp.providerpackage.SchematicContentProvider"
    android:authorities="com.myapp.provider"
    android:exported="false" />
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26120190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档