为什么我自己定义的ContentProvider用contentResolve

杨裕潘 2016-12-18 11:01:16
这是内容提供者代码片段

private static final UriMatcher sURIMatcher = new UriMatcher(UriMatcher.NO_MATCH);
private static final int QUERYSUCESS = 0;
private static final int INSERTSUCESS = 1;
private static final int UPDATESUCESS = 2;
private static final int DELETESUCESS = 3;
private MyOpenHelper myOpenHelper;
static{


sURIMatcher.addURI("com.itheima.provider", "query", QUERYSUCESS);
sURIMatcher.addURI("com.itheima.provider", "insert", INSERTSUCESS);
sURIMatcher.addURI("com.itheima.provider", "update", UPDATESUCESS);
sURIMatcher.addURI("com.itheima.provider", "delete", DELETESUCESS);
}



@Override
public boolean onCreate() {
myOpenHelper = new MyOpenHelper(getContext());
return false;
}


@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
int code = sURIMatcher.match(uri);
if (code ==QUERYSUCESS )
SQLiteDatabase db = myOpenHelper.getReadableDatabase();
Cursor cursor = db.query("info", projection, selection, selectionArgs, null, null, sortOrder);
getContext().getContentResolver().notifyChange(uri, null);
return cursor;

}else{
throw new IllegalArgumentException("你错了");

}


}

这是解析的

Uri uri = Uri.parse("content://com.itheima.provider/query");

Cursor cursor = getContentResolver().query(uri, new String[]{"name","money"}, null, null, null);
if (cursor!=null) {

while(cursor.moveToNext()){
String name = cursor.getString(0);
String money = cursor.getString(1);

System.out.println("name:"+name+"---"+money);

}
}

这是内容提供者的清单文件
   <application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.itheima.db.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

<!-- 配置内容提供者 -->
<provider
android:name="com.itheima.db.AccountProvider"
android:readPermission="com.read"
android:authorities="com.itheima.provider" >
</provider>
</application>
这是报的异常
12-18 14:39:08.586: E/AndroidRuntime(13025): FATAL EXCEPTION: main
12-18 14:39:08.586: E/AndroidRuntime(13025): Process: com.itheima.readdb, PID: 13025
12-18 14:39:08.586: E/AndroidRuntime(13025): java.lang.IllegalStateException: Could not execute method of the activity
12-18 14:39:08.586: E/AndroidRuntime(13025): at android.view.View$1.onClick(View.java:3823)
12-18 14:39:08.586: E/AndroidRuntime(13025): at android.view.View.performClick(View.java:4438)
12-18 14:39:08.586: E/AndroidRuntime(13025): at android.view.View$PerformClick.run(View.java:18422)
12-18 14:39:08.586: E/AndroidRuntime(13025): at android.os.Handler.handleCallback(Handler.java:733)
12-18 14:39:08.586: E/AndroidRuntime(13025): at android.os.Handler.dispatchMessage(Handler.java:95)
12-18 14:39:08.586: E/AndroidRuntime(13025): at android.os.Looper.loop(Looper.java:136)
12-18 14:39:08.586: E/AndroidRuntime(13025): at android.app.ActivityThread.main(ActivityThread.java:5017)
12-18 14:39:08.586: E/AndroidRuntime(13025): at java.lang.reflect.Method.invokeNative(Native Method)
12-18 14:39:08.586: E/AndroidRuntime(13025): at java.lang.reflect.Method.invoke(Method.java:515)
12-18 14:39:08.586: E/AndroidRuntime(13025): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
12-18 14:39:08.586: E/AndroidRuntime(13025): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
12-18 14:39:08.586: E/AndroidRuntime(13025): at dalvik.system.NativeStart.main(Native Method)
12-18 14:39:08.586: E/AndroidRuntime(13025): Caused by: java.lang.reflect.InvocationTargetException
12-18 14:39:08.586: E/AndroidRuntime(13025): at java.lang.reflect.Method.invokeNative(Native Method)
12-18 14:39:08.586: E/AndroidRuntime(13025): at java.lang.reflect.Method.invoke(Method.java:515)
12-18 14:39:08.586: E/AndroidRuntime(13025): at android.view.View$1.onClick(View.java:3818)
12-18 14:39:08.586: E/AndroidRuntime(13025): ... 11 more
12-18 14:39:08.586: E/AndroidRuntime(13025): Caused by: java.lang.SecurityException: Permission Denial: opening provider com.itheima.db.AccountProvider from ProcessRecord{b1297448 13025:com.itheima.readdb/u0a5} (pid=13025, uid=10005) that is not exported from uid 10004
12-18 14:39:08.586: E/AndroidRuntime(13025): at android.os.Parcel.readException(Parcel.java:1465)
12-18 14:39:08.586: E/AndroidRuntime(13025): at android.os.Parcel.readException(Parcel.java:1419)
12-18 14:39:08.586: E/AndroidRuntime(13025): at android.app.ActivityManagerProxy.getContentProvider(ActivityManagerNative.java:2848)
12-18 14:39:08.586: E/AndroidRuntime(13025): at android.app.ActivityThread.acquireProvider(ActivityThread.java:4415)
12-18 14:39:08.586: E/AndroidRuntime(13025): at android.app.ContextImpl$ApplicationContentResolver.acquireProvider(ContextImpl.java:2192)
12-18 14:39:08.586: E/AndroidRuntime(13025): at android.content.ContentResolver.acquireProvider(ContentResolver.java:1378)
12-18 14:39:08.586: E/AndroidRuntime(13025): at android.content.ContentResolver.insert(ContentResolver.java:1184)
12-18 14:39:08.586: E/AndroidRuntime(13025): at com.itheima.readdb.MainActivity.click1(MainActivity.java:34)
...全文
161 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
杨裕潘 2016-12-20
  • 打赏
  • 举报
回复
这是两个应用程序,不是一个
杨裕潘 2016-12-20
  • 打赏
  • 举报
回复
看不懂代码不要乱讲
杨裕潘 2016-12-20
  • 打赏
  • 举报
回复
你自己敲一个看一下行不行,再来说可以吗
杨裕潘 2016-12-19
  • 打赏
  • 举报
回复
我加了,你看一下内容解析器的清单文件
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.itheima.readdb"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-permission android:name="com.read"/>
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.itheima.readdb.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
王三的猫阿德 2016-12-19
  • 打赏
  • 举报
回复
权限问题。 在xml中声明ConentProvider时候设置了权限。
  • 打赏
  • 举报
回复
需要了解权限相关的内容
qq329799 2016-12-19
  • 打赏
  • 举报
回复
我觉得这个问题很有深度,楼主智商已经超过70,不错不错!!!!!!
杨裕潘 2016-12-18
  • 打赏
  • 举报
回复
真的没有没有人吗
杨裕潘 2016-12-18
  • 打赏
  • 举报
回复
有人吗,有人吗,有人吗

80,360

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧