gpt4 book ai didi

java - 内容提供程序未知 URL java.lang.IllegalArgumentException 错误

转载 作者:行者123 更新时间:2023-12-01 11:20:45 25 4
gpt4 key购买 nike

为此奋斗了几个小时,并在代码中尝试了一大堆排列。当我尝试插入新记录时,我不断收到 IllegalArgumentException。

这是 list 声明:

<provider android:name="com.hakeem.model.BoxerProvider" android:exported="false"
android:readPermission="true" android:writePermission="true"
android:authorities="com.hakeem.model" />

这是我的 Contract 类的相关部分:

public static final String TABLE_NAME = "boxers";   

//Column Names
public static final String _ID = BaseColumns._ID;
public static final String BOXER_NAME = "boxer_name";
public static final String WEIGHT_CLASS = "weight_class";
public static final String WINS = "wins";
public static final String LOSSES ="losses";

//Uri Segments
public static final String AUTHORITY = "com.hakeem.model";
public static final String PATH = TABLE_NAME;
public static final Uri BASE_URI = Uri.parse("Content://" + AUTHORITY);
public static final Uri CONTENT_URI = BASE_URI.buildUpon().appendPath(PATH).build();

//Integer tokens for URI Matcher
public static final int BOXER = 10;
public static final int BOXERS = 20;

//Strings differents Uri paths to identify types
public static final String BOXERS_PATH = "boxers";
public static final String BOXER_PATH_ID = "boxers/#";

public static final String BOXER_TYPE = "vnd.android.cursor.dir/com.hakeem.model.boxers";
public static final String BOXER_ID_TYPE = "vnd.android.cursor.item/com.hakeem.model.boxers";

//Call function to build uri matcher
public static final UriMatcher URI_MATCHER = buildUriMatcher();

这是 Provider 类的 getType 和插入函数

@Override
public String getType(Uri uri) {

int uriType = BoxerContract.URI_MATCHER.match(uri);
String sUriType;

switch(uriType){

case BoxerContract.BOXER:
sUriType = BoxerContract.BOXER_ID_TYPE;
break;
case BoxerContract.BOXERS:
sUriType = BoxerContract.BOXER_TYPE;
break;
default:
throw new IllegalArgumentException("Unknown uri: getType" + uri);
}

return sUriType;
}

@Override
public Uri insert(Uri uri, ContentValues values) {

long id;
int uriType = BoxerContract.URI_MATCHER.match(uri);
Uri insertedUri;
SQLiteDatabase boxerDB;

switch(uriType){

case BoxerContract.BOXERS:
boxerDB = dbHelper.getWritableDatabase();
id = boxerDB.insert(BoxerContract.TABLE_NAME, null, values);
break;
default:
throw new IllegalArgumentException("Unknown Uri: in insert statement" + uri);
}

insertedUri = Uri.parse(BoxerContract.TABLE_NAME + "/" + id);

return insertedUri;
}

最后,这是我在 Activity 中调用插入的位置:

values.put(BoxerContract.BOXER_NAME, edBoxerName.getText().toString());
values.put(BoxerContract.WEIGHT_CLASS, edWeight.getText().toString());
values.put(BoxerContract.WINS, edWins.getText().toString());
values.put(BoxerContract.LOSSES,edLoss.getText().toString());


getContentResolver().insert(BoxerContract.CONTENT_URI, values);

现在,我的 Activity 的 onCreate 中的这段代码不会导致错误,但似乎会被忽略,因为提供程序的查询方法中的日志语句不会出现在 logcat 中。

cursor = getContentResolver().query(BoxerContract.CONTENT_URI, projection, null, null, null);

为了简洁起见,我排除了一些代码。如果我需要发布其他内容,请告诉我。

最佳答案

将来,请发布完整的堆栈跟踪。

话虽这么说,请尝试将 Uri.parse("Content://"+ AUTHORITY); 替换为 Uri.parse("content://"+ AUTHORITY);,因为 Android 通常区分大小写。

关于java - 内容提供程序未知 URL java.lang.IllegalArgumentException 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31252168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com