talk在最近的一次演讲中提到了这个库,它看起来是一个很好的避免样板文件的方法,所以我试了试。但没有任何成功。https://github.com/SimonVT/schematic
下面是带有注释和清单提供程序元素的内容提供程序的定义。问题是Android Studio不喜欢provider定义,因为content provider类没有扩展ContentProvider。
Caused by: java.lang.ClassCastException: com.myapp.SchematicContentProvider
cannot be cast to android.content.ContentProvider我遗漏了什么?它可能与我没有使用的android-apt有关(原理图推荐它,但似乎不需要它)-当我尝试使用android-apt时,我得到了一个VerifyError,所以不得不从构建中删除它。
AndroidManifest.xml
<provider
android:name="com.myapp.SchematicContentProvider"
android:authorities="com.myapp.provider"
android:exported="false" />和类的定义:
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。
很遗憾,它不适合我,它有很大的潜力。
发布于 2015-05-28 15:27:51
您没有声明正确的ContentProvider。您必须在Manifest中声明生成的清单。我喜欢这样:
<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文件的帮助。
发布于 2015-06-04 20:14:22
您收到此错误是因为com.myapp.SchematicContentProvider是您的带注释的类,而不是生成的ContentProvider (将具有相同的名称)。
Louis Cognault给出了正确的答案,但是值得一提的是Schematic为@ContentProvider和@Database注释提供了一个特殊的参数packageName。packageName定义了生成的类的放置位置。它让您了解如何创建AndroidManifest.xml。
提供程序定义类:
@ContentProvider(
authority = SchematicContentProvider.AUTHORITY,
database = SchematicDatabase.class,
packageName = "com.myapp.providerpackage")
public class SchematicContentProvider {
...
}数据库定义类:
@Database(
version = SchematicDatabase.VERSION,
packageName = "com.myapp.providerpackage"
)
public class SchematicDatabase{
public static final int VERSION = 1;
...
}AndroidManifest.xml:
<provider
android:name="com.myapp.providerpackage.SchematicContentProvider"
android:authorities="com.myapp.provider"
android:exported="false" />https://stackoverflow.com/questions/26120190
复制相似问题