Class 未找到 ContentProvider 异常
Class Not Found Exception for ContentProvider
我正在尝试为我的 Xamarin.Android 应用编写内容提供程序。
我有我的 ContentProvder class (./ContentProviders/SitesProvider.cs):
namespace ContentProviders
{
[ContentProvider(new string[] { ContentProviders.SitesProvider.AUTHORITY })]
public class SitesProvider : ContentProvider
{
public const string AUTHORITY = "com.xamarin.sample.ContentProviders.SitesProvider";
static string BASE_PATH = "TableName";
public static readonly Uri CONTENT_URI = Uri.Parse("content://" + AUTHORITY + "/" + BASE_PATH);
public override bool OnCreate()
{
return true;
}
...
}
在我的 AndroidManifest.xml 中,我已将以下内容添加到我的元素中
<provider android:name="com.xamarin.sample.ContentProviders.SitesProvider" android:authorities="com.xamarin.sample.ContentProviders.SitesProvider" android:exported="true"></provider>
当我尝试 运行 我的应用程序时,我收到以下错误消息:
Java.lang.RuntimeException: 'Unable to get provider com.xamarin.sample.ContentProviders.SitesProvider: java.lang.ClassNotFoundException: Didn't find class "com.xamarin.sample.ContentProviders.SiteProvider" on path: DexPathList[[zip file "/data/app/com.xamarin.sample-STvUsF9R8PqrLEnQciN42g==/base.apk"],nativeLibraryDirectories=[/data/app/com.xamarin.sample-STvUsF9R8PqrLEnQciN42g==/lib/arm64, /data/app/com.xamarin.sample-STvUsF9R8PqrLEnQciN42g==/base.apk!/lib/arm64-v8a, /system/lib64, /hw_product/lib64, /system/product/lib64, /prets/lib64]]'
您添加到您创建的 class 的属性与您手动添加到 AndroidManifest 的属性冲突。你应该只做其中的一项。
所以这意味着:
[ContentProvider(new string[] { ContentProviders.SitesProvider.AUTHORITY })]
将在构建时自动添加到 AndroidManifest。
您可以向其中添加更多信息,例如您想使用的导出和命名:
[ContentProvider(new string[] { ContentProviders.SitesProvider.AUTHORITY }, Exported = true, Name = "com.xamarin.sample.ContentProviders.SitesProvider")]
您可以在构建时在 obj/Debug/android
文件夹中检查生成的清单。
我正在尝试为我的 Xamarin.Android 应用编写内容提供程序。
我有我的 ContentProvder class (./ContentProviders/SitesProvider.cs):
namespace ContentProviders
{
[ContentProvider(new string[] { ContentProviders.SitesProvider.AUTHORITY })]
public class SitesProvider : ContentProvider
{
public const string AUTHORITY = "com.xamarin.sample.ContentProviders.SitesProvider";
static string BASE_PATH = "TableName";
public static readonly Uri CONTENT_URI = Uri.Parse("content://" + AUTHORITY + "/" + BASE_PATH);
public override bool OnCreate()
{
return true;
}
...
}
在我的 AndroidManifest.xml 中,我已将以下内容添加到我的元素中
<provider android:name="com.xamarin.sample.ContentProviders.SitesProvider" android:authorities="com.xamarin.sample.ContentProviders.SitesProvider" android:exported="true"></provider>
当我尝试 运行 我的应用程序时,我收到以下错误消息:
Java.lang.RuntimeException: 'Unable to get provider com.xamarin.sample.ContentProviders.SitesProvider: java.lang.ClassNotFoundException: Didn't find class "com.xamarin.sample.ContentProviders.SiteProvider" on path: DexPathList[[zip file "/data/app/com.xamarin.sample-STvUsF9R8PqrLEnQciN42g==/base.apk"],nativeLibraryDirectories=[/data/app/com.xamarin.sample-STvUsF9R8PqrLEnQciN42g==/lib/arm64, /data/app/com.xamarin.sample-STvUsF9R8PqrLEnQciN42g==/base.apk!/lib/arm64-v8a, /system/lib64, /hw_product/lib64, /system/product/lib64, /prets/lib64]]'
您添加到您创建的 class 的属性与您手动添加到 AndroidManifest 的属性冲突。你应该只做其中的一项。
所以这意味着:
[ContentProvider(new string[] { ContentProviders.SitesProvider.AUTHORITY })]
将在构建时自动添加到 AndroidManifest。
您可以向其中添加更多信息,例如您想使用的导出和命名:
[ContentProvider(new string[] { ContentProviders.SitesProvider.AUTHORITY }, Exported = true, Name = "com.xamarin.sample.ContentProviders.SitesProvider")]
您可以在构建时在 obj/Debug/android
文件夹中检查生成的清单。