内容提供商自定义客户端 - 未收到任何内容

时间:2016-04-18 07:57:44

标签: android provider

我已经阅读了很多关于内容提供商的答案,但我无法理解为什么我的客户没有收到存储在数据库中的任何数据。

- 我到处都使用相同的uri。

- 我已在清单中的提供程序中添加了读写权限。

- 我已导出提供程序并将多进程设置为" true"太

- 我的应用程序中的客户端具有相同的读写权限。

- 我在app中为我的客户端创建了一个包含解析器的jar。我已将其添加为库。

- 我知道参数进入数据库,因为我可以看到数据库中的所有信息。

- 在我完成上述所有操作之前,我的客户端无法连接到提供商,因为我修复了有关它的异常。

现在一切都应该工作,不再崩溃,但我从解析器获得的所有字符串都是空的。我不知道它是否真的与提供商有关,或者是否有其他不正确之处。 请帮我! 问:提供者声明中的权限字符串和权限字符串是否必须与包结构匹配?

以下是一些代码: 清单中的提供者声明:

    <provider
    android:name=".lessons.LessonsProvider"
    android:authorities="com.scheduler.lessons"
    android:readPermission="com.lessons.READ_DATABASE"
    android:writePermission="com.lessons.WRITE_DATABASE"
    android:multiprocess="true"
    android:exported="true" />

解析器代码:     公共课LessonsResolver {

private static final String TAG = "LessonProvider";

private final String PROVIDER_NAME = "com.scheduler.lessons";
private Uri uri;
private Context mContext;

public LessonsResolver(Context context) {
    super();
    mContext = context;
    uri = Uri.parse("content://"+ PROVIDER_NAME+"/parameters_table");
}
public String getString(String parameterName, String defaultValue) {
    Cursor cursor = mContext.getContentResolver().query(uri, null, "parameter_name='"+parameterName+"'", null, null);
    if (cursor == null || cursor.getCount() == 0) {
        Log.e(TAG,"getString: for parameterName: " + parameterName + ", cursor from the content provider  "+ (cursor == null ? "is NULL" : "is empty" ));
        cursor.close();
        return defaultValue;
    }

    cursor.moveToFirst();
    String s = cursor.getString(2);
    cursor.close();
    return s;

}

客户端应用清单中的权限:

 <uses-permission android:name="com.lessons.READ_DATABASE"/>
 <uses-permission android:name="com.lessons.WRITE_DATABASE"/>

我的提供者:

public class LessonsProvider extends ContentProvider {

public static final String PROVIDER_NAME = "com.scheduler.lessons";
private static final String TABLE_NAME = "lessons";
private static final String TAG = "LessonsProvider";
private static final Uri CONTENT_URI = Uri.parse("content://"+PROVIDER_NAME + "/parameters_table");
...
@Override
public Cursor query(Uri uri, String[] projection, String selection,
                    String[] selectionArgs, String sortOrder) {
    SQLiteQueryBuilder sqlBuilder = new SQLiteQueryBuilder();
    sqlBuilder.setTables(TABLE_NAME);
    Cursor c = sqlBuilder.query(mSqlDB, projection, selection, selectionArgs, null, null, null);
    return c;       
}

0 个答案:

没有答案