Java.lang.illegalargumentException未知的URL内容

时间:2019-09-29 21:25:52

标签: java android exception android-contentprovider android-contentresolver

我正在学习Android中的Content Provider。但是,当我尝试按照本教程https://www.tutorialspoint.com/android/android_content_providers.htm创建自定义内容提供程序时,出现以下异常:

java.lang.IllegalArgumentException: Unknown URL content://com.example.mytest/students

清单:

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".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="MyContent"
                android:exported="false"
                android:enabled="true"
                android:grantUriPermissions="true"
                android:label="MyContent"
                android:readPermission="com.example.mytest.READ_DATABASE"
                android:writePermission="com.example.mytest.WRITE_DATABASE"
                android:authorities="come.example.mytest"/>
</application>

具有CONTENT_URI和AUTHORITY的ContentProvider类的子类:

public class MyContent extends ContentProvider {
     static final String AUTHORITY = "com.example.mytest";
     static final String CONTENT_PATH = "students";
     static final String URL = "content://"+AUTHORITY+"/"+CONTENT_PATH;
     static final Uri   CONTENT_URI     = Uri.parse(URL);
     ...
}

发生异常的代码:

try{
        Uri uri = contentResolver.insert((MyContent.CONTENT_URI), values);
        Toast.makeText(getApplicationContext(), uri.toString(), Toast.LENGTH_LONG).show();
    }catch(Exception e){
        Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_LONG).show();
    }

然后我决定通过探索ContentResolver类https://github.com/aosp-mirror/platform_frameworks_base/blob/master/core/java/android/content/ContentResolver.java来研究问题的出处,但它导致另一个异常:UnsupportedOperationException

public static final String SCHEME_CONTENT = "content";
/** {@hide} */
public static @NonNull ContentResolver wrap(@NonNull ContentInterface wrapped) {
    Preconditions.checkNotNull(wrapped);

    return new ContentResolver(null, wrapped) {
        @Override
        public void unstableProviderDied(IContentProvider icp) {
            throw new UnsupportedOperationException();
        }
        @Override
        public boolean releaseUnstableProvider(IContentProvider icp) {
            throw new UnsupportedOperationException();
        }
        @Override
        public boolean releaseProvider(IContentProvider icp) {
            throw new UnsupportedOperationException();
        }
        @Override
        protected IContentProvider acquireUnstableProvider(Context c, String name) {
            throw new UnsupportedOperationException();
        }
        @Override
        protected IContentProvider acquireProvider(Context c, String name) {
            throw new UnsupportedOperationException();
        }
    };
}
@UnsupportedAppUsage
public final IContentProvider acquireProvider(Uri uri) {
    final String auth = uri.getAuthority();
    if (auth != null) {
        return acquireProvider(mContext, auth);
    }
    return null;
}
@Override
public final @Nullable Uri insert(@RequiresPermission.Write @NonNull Uri url,
            @Nullable ContentValues values) {
    ...
    IContentProvider provider = acquireProvider(url);
    if (provider == null) {
        throw new IllegalArgumentException("Unknown URL " + url);
    }
    ...
}

有人可以帮忙吗,谢谢。

0 个答案:

没有答案