Hi,
I have written the following content provider, but when I try to pull
information from it into an array, I get the following error:
12-21 15:14:18.627: ERROR/ActivityThread(1160): Failed to find
provider info for cicero.org.provider.CiceroContentProvider
I presume its something to do with my naming of the CONTENT_URI or
something? I'm not quite sure how it works so could anyone explain a
bit and spot what I have done wrong?
This is what I have in the manifest:
XML:
<provider android:name=".CiceroContentProvider"
android:authorities="cicero.org.provider.CiceroContentProvider" />
Java:
public class CiceroContentProvider extends ContentProvider{
//URI
public static final Uri CONTENT_URI =
Uri.parse("content://
cicero.org.provider.CiceroContentProvider");
//Underlying database
private SQLiteDatabase settingsDB;
private static final String TAG = "CiceroProvider";
private static final String DATABASE_NAME = "cicero_settings.db";
private static final int DATABASE_VERSION = 1;
private static final String SETTINGS_TABLE = "settings";
//Column names
public final static String _ID = "_id";
public final static String VOIPUSERNAME = "voipusername";
public final static String VOIPAUTHID = "voipauthid";
public final static String PASSWORD = "password";
public final static String SIPPROXYSERVER = "sipproxyserver";
public final static String SIPREGISTRAR = "sipregistrar";
public final static String SIPREALM = "siprealm";
public final static Integer EXPIRESTIME =30;
//column indexes
public static final int VOIPUSERNAME_COL = 1;
public static final int VOIPAUTHID_COL = 2;
public static final int PASSWORD_COL = 3;
public static final int SIPPROXYSERVER_COL = 4;
public static final int SIPREGISTRAR_COL = 5;
public static final int SIPREALM_COL = 6;
public static final int EXPIRESTIME_COL = 7;
//helper class
private static class settingsDatabaseHelper extends
SQLiteOpenHelper{
private static final String CREATE_SETTINGS_TABLE
= "CREATE TABLE tbl_settings(" +
"_ID INTEGER PRIMARY KEY AUTOINCREMENT," +
"VOIPUSERNAME TEXT," +
"VOIPAUTHID TEXT," +
"PASSWORD TEXT," +
"SIPPROXYSERVER TEXT," +
"SIPREGISTRAR TEXT," +
"SIPREALM TEXT," +
"EXPIRESTIME INTEGER);";
public settingsDatabaseHelper(Context context, String name,
CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_SETTINGS_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int
newVersion) {
Log.w(TAG, "Upgrading database from version " +
oldVersion + " to " +
newVersion + ", which will destroy all old
data");
db.execSQL("DROP TABLE IF EXISTS " + SETTINGS_TABLE);
onCreate(db);
}
}
//end helper class
private static final int SETTINGS = 1;
private static final int SETTINGS_ID = 2;
private static final UriMatcher uriMatcher;
static{
uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
uriMatcher.addURI
("cicero.org.provider.CiceroContentProvider", "settings", SETTINGS);
uriMatcher.addURI
("cicero.org.provider.CiceroContentProvider", "settings/#",
SETTINGS_ID);
}
@Override
public String getType(Uri uri) {
switch(uriMatcher.match(uri)){
case SETTINGS:
return "vnd.android.cursor.dir/
vnd.org.CiceroContentProvider";
case SETTINGS_ID:
return "vnd.android.cursor.item/
vnd.org.CiceroContentProvider";
default:
throw new IllegalArgumentException("Unsupported URI: "
+ uri);
}
}
@Override
public boolean onCreate() {
Context context = getContext();
settingsDatabaseHelper dbHelper;
dbHelper = new settingsDatabaseHelper(context,
DATABASE_NAME, null, DATABASE_VERSION);
SQLiteDatabase settingsDB = dbHelper.getWritableDatabase();
return (settingsDB == null) ? false : true;
}
@Override
public Cursor query(Uri uri, String[] projection, String
selection,
String[] selectionArgs, String sortOrder) {
SQLiteQueryBuilder qBuilder = new SQLiteQueryBuilder();
qBuilder.setTables(SETTINGS_TABLE);
switch(uriMatcher.match(uri)){
case SETTINGS_ID:
qBuilder.appendWhere(_ID + "=" + uri.getPathSegments
().get(1));
break;
default:
break;
}
String orderBy;
if(TextUtils.isEmpty(sortOrder)){
orderBy = VOIPUSERNAME;
}
else{
orderBy = sortOrder;
}
Cursor c = qBuilder.query(settingsDB, projection, selection,
selectionArgs, null, null, orderBy);
c.setNotificationUri(getContext().getContentResolver(),
uri);
return c;
}
@Override
public int update(Uri uri, ContentValues values, String
selection,
String[] selectionArgs) {
int count;
switch(uriMatcher.match(uri)){
case SETTINGS:
count = settingsDB.update(SETTINGS_TABLE, values,
selection, selectionArgs);
break;
case SETTINGS_ID:
String segment = uri.getPathSegments().get(1);
count = settingsDB.update(SETTINGS_TABLE, values, _ID +
"=" + segment + (!TextUtils.isEmpty(selection) ? " AND (" + selection
+ ')' : ""), selectionArgs);
break;
default:
throw new IllegalArgumentException("Unkonwn URI " +
uri);
}
getContext().getContentResolver().notifyChange(uri, null);
return count;
}
@Override
public int delete(Uri uri, String selection, String[]
selectionArgs) {
int count;
switch(uriMatcher.match(uri)){
case SETTINGS:
count = settingsDB.delete(SETTINGS_TABLE, selection,
selectionArgs);
break;
case SETTINGS_ID:
String segment = uri.getPathSegments().get(1);
count = settingsDB.delete(SETTINGS_TABLE, _ID + "=" +
segment + (!TextUtils.isEmpty(selection) ? " AND (" + selection +
')':""), selectionArgs);
break;
default:
throw new IllegalArgumentException("Unsupported URI: "
+ uri);
}
getContext().getContentResolver().notifyChange(uri, null);
return count;
}
@Override
public Uri insert(Uri _uri, ContentValues _initialValues) {
long rowId = settingsDB.insert(SETTINGS_TABLE,
"settings",_initialValues);
if(rowId > 0){
Uri uri = ContentUris.withAppendedId(CONTENT_URI,
rowId);
getContext().getContentResolver().notifyChange(uri,
null);
return uri;
}
throw new SQLException("Failed to insert row into " + _uri);
}
}
--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en