无法找到供应商信息为<定制的提供商GT; [英] Failed to find provider info for <custom provider>

查看:172
本文介绍了无法找到供应商信息为<定制的提供商GT;的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我看了刚才的一切有在这里找到在这个问题上,没有得到过去,这

我有一个简单的应用程序开始的 MainActivity ,我的内容提供商中正确定义的Andr​​oidManifest.xml 的ContentProvider 类似乎alrighty ......这已经在运行4.3的Nexus I9250和华硕便笺运行测试4.2.1以及VDevices运行果冻豆。该应用程序在每一个实例中运行,不死机,给了我 LogCat中的唯一事情就是无法找到de.somename.provider供应商信息在哪里我的片段中的一个尝试查询内容提供商并获得光标点。在这里,code:

的Andr​​oidManifest.xml

 <?XML版本=1.0编码=UTF-8&GT?;

 <采用-SDK安卓的minSdkVersion =14
          机器人:targetSdkVersion =18/><应用机器人:allowBackup =真
             机器人:图标=@绘制/ ic_launcher
             机器人:标签=@字符串/ APP_NAME
             机器人:主题=@风格/ AppTheme>
    <活动机器人:名字=de.somename.hvk3.MainActivity
              机器人:标签=@字符串/ APP_NAME>
              &所述;意图滤光器>
                  <作用机器人:名字=android.intent.action.MAIN/>
                  <类机器人:名字=android.intent.category.LAUNCHER/>
              < /意向滤光器>< /活性GT;
    <活动机器人:名字=de.somename.hvk3.UserSettingActivity
              机器人:标签=@字符串/设置>< /活性GT;
    <供应商的android:当局=de.somename.provider
              机器人:启用=真
              机器人:多进程=真
              机器人:名字=。hvkContentProvider
              机器人:出口=真正的>< /提供商GT;
< /用途>

hvkContentProvider.java

 公共类hvkContentProvider扩展ContentProvider的{私有静态最后弦乐DATABASE_NAME =hvkDB;
私有静态最终诠释DATABASE_VERSION = 1;
公共静态最后弦乐管理局=de.somename.provider;
公共静态最后弦乐ElementPath =/ hv_kontakte;
公共静态最终乌里CONTENT_URI = Uri.parse(内容://+ +管理局ElementPath);
私有静态最终诠释ALLROWS = 1;
私有静态最终诠释SINGLE_ROW = 2;私有静态最终UriMatcher suriMatcher =新UriMatcher(UriMatcher.NO_MATCH);
静态{
    suriMatcher.addURI(de.somename.provider,ElementPath,ALLROWS);
    suriMatcher.addURI(de.somename.provider,ElementPath +/#,SINGLE_ROW);
}公共静态最后弦乐KEY_ID =_id;
公共静态最后弦乐为key_type =类型;
公共静态最后弦乐KEY_CLTYP =cltyp;
公共静态最后弦乐KEY_MDT =MDT;
公共静态最后弦乐KEY_OBJ =目标文件;
公共静态最后弦乐KEY_VTR =VTR;
公共静态最后弦乐KEY_FKZ =FKZ;
公共静态最后弦乐KEY_NAME =名;
公共静态最后弦乐KEY_VNAME =VNAME;
公共静态最后弦乐KEY_TEL =电话;
公共静态最后弦乐KEY_FAX =传真;
公共静态最后弦乐KEY_MOBIL =美孚
公共静态最后弦乐KEY_EMAIL =电子邮件;私人MySQLiteOpenHelper myOpenHelper;@覆盖
公共布尔的onCreate(){    myOpenHelper =新MySQLiteOpenHelper(的getContext(),DATABASE_NAME,空,DATABASE_VERSION);
    返回true;
}@覆盖
公共光标查询(URI URI,字符串[]投影,字符串的选择,
        的String [] selectionArgs两个,字符串中将sortOrder){    SQLiteDatabase分贝= myOpenHelper.getReadableDatabase();    字符串GROUPBY = NULL;
    字符串有= NULL;
    SQLiteQueryBuilder的QueryBuilder =新SQLiteQueryBuilder();
    queryBuilder.setTables(MySQLiteOpenHelper.DATABASE_TABLE);    开关(suriMatcher.match(URI)){
    案例SINGLE_ROW:
        字符串ROWID = uri.getPathSegments()得到(1)。
        queryBuilder.appendWhere(KEY_ID +=+ ROWID);
    默认:打破;
    }    光标光标= queryBuilder.query(分贝,投影,选择,selectionArgs两个,GROUPBY,HAVING中将sortOrder);    返回游标;
}@覆盖
公众诠释删除(URI URI,选择字符串,字符串[] selectionArgs两个){
    SQLiteDatabase分贝= myOpenHelper.getWritableDatabase();
    开关(suriMatcher.match(URI)){
    案例SINGLE_ROW:
        字符串ROWID = uri.getPathSegments()得到(1)。
        选择= KEY_ID +=+ ROWID
                +(!TextUtils.isEmpty(选择)?
                AND(+选择+')':);
    默认:打破;
    }
    //返回删除的项目的数量,您必须指定一个where子句。要删除所有行和1返回一个值通
    如果(选择== NULL)
        选择=1;    返回db.delete(MySQLiteOpenHelper.DATABASE_TABLE,选择selectionArgs两个);
}@覆盖
公共乌里插入(URI URI,ContentValues​​值){    SQLiteDatabase分贝= myOpenHelper.getWritableDatabase();
    字符串nullColumnHack = NULL;
    长ID = db.insert(MySQLiteOpenHelper.DATABASE_TABLE,nullColumnHack,价值观);    如果(ID -1个){
        乌里insertedId = ContentUris.withAppendedId(CONTENT_URI,身份证);
        。的getContext()getContentResolver()有NotifyChange(insertedId,NULL);
        返回insertedId;
    }
    其他
        返回null;
}@覆盖
公众诠释更新(开放的URI,ContentValues​​值,字符串的选择,
        的String [] selectionArgs两个){    SQLiteDatabase分贝= myOpenHelper.getWritableDatabase();    开关(suriMatcher.match(URI)){
    案例SINGLE_ROW:
        字符串ROWID = uri.getPathSegments()得到(1)。
        选择= KEY_ID +=+ ROWID
            +(!TextUtils.isEmpty(选择)?
            AND(+选择+')':);
    默认:打破;
    }    返回db.update(MySQLiteOpenHelper.DATABASE_TABLE,价值观,选择,selectionArgs两个);
}@覆盖
公共字符串的getType(URI URI){
    开关(suriMatcher.match(URI)){
    案例ALLROWS:
        返回vnd.android.cursor.dir / vnd.somename.contacts
    案例SINGLE_ROW:
        返回vnd.android.cursor.item / vnd.somename.contacts
    默认:
        抛出新抛出:IllegalArgumentException(不支持的URI:+ URI);
    }
}@覆盖
公共ParcelFileDescriptor中openFile(URI URI,字符串模式)抛出FileNotFoundException异常{    //查找行ID,并把它作为一个文件名
    字符串ROWID = uri.getPathSegments()得到(1)。    //创建的应用程序外部文件目录下的文件对象
    字符串picsDir = Environment.DIRECTORY_PICTURES;
    档案文件=新的文件(的getContext()getExternalFilesDir(picsDir),ROWID);    如果(!file.exists()){
        尝试{
            file.createNewFile();
        }赶上(IOException异常五){
            //Log.d(TAG,文件创建失败:+ e.getMessage());
        }
    }    //翻译mode参数到相应的包裹的文件描述符模式
    INT中将fileMode = 0;
    如果(mode.contains(W))
        中将fileMode | = ParcelFileDescriptor.MODE_WRITE_ONLY;
    如果(mode.contains(R))
        中将fileMode | = ParcelFileDescriptor.MODE_READ_ONLY;
    如果(mode.contains(+))
        中将fileMode | = ParcelFileDescriptor.MODE_APPEND;    返回ParcelFileDescriptor.open(文件中将fileMode);
}私有类MySQLiteOpenHelper扩展SQLiteOpenHelper {//以前是静态的    公共静态最后弦乐DATABASE_TABLE =hv_kontakte;
    私有静态最后弦乐DATABASE_CREATE =
            CREATE TABLE+ DATABASE_TABLE +(+ KEY_ID +INTEGER PRIMARY KEY AUTOINCREMENT,+
                    为key_type +TEXT+ KEY_CLTYP +TEXT+ KEY_MDT +INTEGER,+ KEY_OBJ +INTEGER
                    + KEY_VTR +INTEGER,+ KEY_FKZ +INTEGER,+ KEY_NAME +TEXT+ KEY_VNAME +TEXT
                    + KEY_TEL +TEXT+ KEY_FAX +TEXT+ KEY_MOBIL +TEXT+ KEY_EMAIL +TEXT);    公共MySQLiteOpenHelper(上下文的背景下,字符串名称,SQLiteDatabase.CursorFactory工厂,诠释的版本){
        超(背景下,DATABASE_NAME,空,DATABASE_VERSION);
    }    @覆盖
    公共无效的onCreate(SQLiteDatabase数据库){
        database.execSQL(DATABASE_CREATE);
        hvkContentProvider.this.insertSomeContacts();
    }    @覆盖
    公共无效onUpgrade(SQLiteDatabase数据库,诠释oldVersion,诠释静态网页){
        database.execSQL(DROP TABLE IF EXISTS+ DATABASE_TABLE);
        的onCreate(数据库);
    }
}

}

HdwFragment.java

 公共类HdwFragment扩展片段{私人SimpleCursorAdapter hdwDataAdapter;
私人的ListView列表视图;
公共静态最后弦乐ARG_SECTION_NUMBER =SECTION_NUMBER;
私有静态最后弦乐TAG =HdwFragment;
公共HdwFragment(){}@覆盖
公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,捆绑savedInstanceState){    上下文的背景下= getActivity();
    查看rootView = inflater.inflate(R.layout.fragment_all,集装箱,FALSE);
    TextView的dummyTextView =(TextView中)rootView.findViewById(R.id.section_label);
    dummyTextView.setText(Dienstleister);
    //android.support.v4.app.LoaderManager loaderManager = getLoaderManager();    Log.i(TAGgetContentResolver之前);
    ContentResolver的CR = context.getContentResolver();
    Log.i(TAGresult_columns之前);
    的String [] = result_columns新的String [] {
            hvkContentProvider.KEY_ID,
            hvkContentProvider.KEY_TYPE,
            hvkContentProvider.KEY_CLTYP,
            hvkContentProvider.KEY_NAME,
            hvkContentProvider.KEY_VNAME
    };
    Log.i(TAG,其中,whereArgs和秩序之前);
    字符串,其中= NULL;
    字符串whereArgs [] = NULL;
    为了字符串= NULL;
    Log.i(TAGresultCursor行动之前);
    Log.i(TAG,hvkContentProvider URI:+ hvkContentProvider.CONTENT_URI);
    光标resultCursor = cr.query(hvkContentProvider.CONTENT_URI,result_columns,其中,whereArgs,顺序);
    Log.i(TAGresultCursor =+ resultCursor);
    Log.i(TAGfromColumns之前);
    的String [] = fromColumns新的String [] {
            hvkContentProvider.KEY_TYPE,
            hvkContentProvider.KEY_CLTYP,
            hvkContentProvider.KEY_NAME,
            hvkContentProvider.KEY_VNAME
    };
    Log.i(TAGtoViews之前);
    INT [] = toViews新INT [] {
        R.id.contactType,
        R.id.contactCltype,
        R.id.contactName,
        R.id.contactVname
    };
    Log.i(TAG,适配器之前);
    hdwDataAdapter =新SimpleCursorAdapter(getActivity(),R.layout.object_list_item,resultCursor,fromColumns,toViews,0);
    列表视图=(ListView控件)rootView.findViewById(R.id.list_all);
    listview.setAdapter(hdwDataAdapter);
    Log.i(TAG,回路布局之前);
    返回(的LinearLayout)rootView;
}@覆盖
公共无效onActivityCreated(捆绑savedInstanceState){
    super.onActivityCreated(savedInstanceState);    //捆绑ARGS = NULL;
    //loaderManager.initLoader(LOADER_ID,ARGS,loaderCallback);
}

}

的方法:insertSomeFunctions()我已经离开了,因为它不会在这里做一个区别,要去把赏金这个尽快。真的需要这个工作。


解决方案

 <供应商的android:当局=de.somename.provider
    机器人:启用=真
    机器人:多进程=真
    机器人:名字=。hvkContentProvider
    机器人:出口=真正的>< /提供商GT;

&LT从参考页;提供商GT; 链接


  

的android:当局: ......为了避免
  冲突,权威名称应该使用Java风格的命名约定
  (如 com.example.provider.cartoonprovider )。通常情况下,它的
  命名实现提供商ContentProvider的子类。


在你的情况,的android:当局应该有值: de.somename.provider.hvkContentProvider



  

的android:名称: ......本类的名称实现内容
  提供商的ContentProvider的子类。这应该是一个完全
  限定类名
(如,
  com.example.project.TransportationProvider)。然而,作为一个
  速记,如果名称的第一个字符是一个时期,这是
  附加在元素中指定的包名


所以,如果你定义中的清单标记的Andr​​oidManifest.xml ,确保 hvkContentProvider 的那个包。否则,将的android:NAME =。hvkContentProvider的android:NAME =de.somename.hvk3.hvkContentProvider your.package.name.hvkContentProvider

I have read just about everything there is to find here on this issue, not getting past this.

I have a simple app starting with the MainActivity, my Content Provider is correctly defined in AndroidManifest.xml, the ContentProvider class seems alrighty...this has been tested on a nexus i9250 running 4.3 and an Asus Memo Pad running 4.2.1 as well as VDevices running Jelly Bean. The App runs in every instance and does not crash, the only thing the LogCat gives me is "Failed to find provider info for de.somename.provider" at the point where one of my fragments tries to query the Content Provider and get a cursor. Here the Code:

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>

<uses-sdk android:minSdkVersion="14"
          android:targetSdkVersion="18" />

<application android:allowBackup="true"
             android:icon="@drawable/ic_launcher"
             android:label="@string/app_name"
             android:theme="@style/AppTheme" >
    <activity android:name="de.somename.hvk3.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>
    <activity android:name="de.somename.hvk3.UserSettingActivity"
              android:label="@string/settings" ></activity>
    <provider android:authorities="de.somename.provider"
              android:enabled="true"
              android:multiprocess="true"
              android:name=".hvkContentProvider"
              android:exported="true" ></provider>
</application>

hvkContentProvider.java

    public class hvkContentProvider extends ContentProvider {

private static final String DATABASE_NAME = "hvkDB";
private static final int DATABASE_VERSION = 1;
public static final String Authority = "de.somename.provider";
public static final String ElementPath = "/hv_kontakte";
public static final Uri CONTENT_URI = Uri.parse("content://" + Authority + ElementPath);
private static final int ALLROWS = 1;
private static final int SINGLE_ROW = 2;

private static final UriMatcher suriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
static{
    suriMatcher.addURI("de.somename.provider", ElementPath, ALLROWS);
    suriMatcher.addURI("de.somename.provider", ElementPath + "/#", SINGLE_ROW);
}

public static final String KEY_ID = "_id";
public static final String KEY_TYPE = "type";
public static final String KEY_CLTYP = "cltyp";
public static final String KEY_MDT = "mdt";
public static final String KEY_OBJ = "obj";
public static final String KEY_VTR = "vtr";
public static final String KEY_FKZ = "fkz";
public static final String KEY_NAME = "name";
public static final String KEY_VNAME = "vname";
public static final String KEY_TEL = "tel";
public static final String KEY_FAX = "fax";
public static final String KEY_MOBIL = "mobil";
public static final String KEY_EMAIL = "email";

private MySQLiteOpenHelper myOpenHelper;

@Override
public boolean onCreate() {

    myOpenHelper = new MySQLiteOpenHelper(getContext(), DATABASE_NAME, null, DATABASE_VERSION);
    return true;
}

@Override
public Cursor query(Uri uri, String[] projection, String selection,
        String[] selectionArgs, String sortOrder) {

    SQLiteDatabase db = myOpenHelper.getReadableDatabase();

    String groupBy = null;
    String having = null;
    SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
    queryBuilder.setTables(MySQLiteOpenHelper.DATABASE_TABLE);

    switch(suriMatcher.match(uri)){
    case SINGLE_ROW:
        String rowID = uri.getPathSegments().get(1);
        queryBuilder.appendWhere(KEY_ID + "=" + rowID);
    default: break;
    }

    Cursor cursor = queryBuilder.query(db, projection, selection, selectionArgs, groupBy, having, sortOrder);

    return cursor;
}

@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
    SQLiteDatabase db = myOpenHelper.getWritableDatabase();
    switch(suriMatcher.match(uri)){
    case SINGLE_ROW:
        String rowID = uri.getPathSegments().get(1);
        selection = KEY_ID + "=" + rowID
                + (!TextUtils.isEmpty(selection) ?
                " AND (" + selection + ')' : "");
    default: break;
    }
    //To return the number of deleted items you must specify a where clause. To delete all rows and return a value pass in "1"
    if (selection == null)
        selection = "1";

    return db.delete(MySQLiteOpenHelper.DATABASE_TABLE, selection, selectionArgs);
}

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

    SQLiteDatabase db = myOpenHelper.getWritableDatabase();
    String nullColumnHack = null;
    long id = db.insert(MySQLiteOpenHelper.DATABASE_TABLE, nullColumnHack, values);

    if(id > -1){
        Uri insertedId = ContentUris.withAppendedId(CONTENT_URI, id);
        getContext().getContentResolver().notifyChange(insertedId, null);
        return insertedId;
    }
    else
        return null;
}

@Override
public int update(Uri uri, ContentValues values, String selection,
        String[] selectionArgs) {

    SQLiteDatabase db = myOpenHelper.getWritableDatabase();

    switch(suriMatcher.match(uri)){
    case SINGLE_ROW:
        String rowID = uri.getPathSegments().get(1);
        selection = KEY_ID + "=" + rowID
            + (!TextUtils.isEmpty(selection) ?
            " AND (" + selection + ')' : "");
    default: break;
    }

    return db.update(MySQLiteOpenHelper.DATABASE_TABLE, values, selection, selectionArgs);
}

@Override
public String getType(Uri uri) {
    switch(suriMatcher.match(uri)){
    case ALLROWS:
        return "vnd.android.cursor.dir/vnd.somename.contacts";
    case SINGLE_ROW:
        return "vnd.android.cursor.item/vnd.somename.contacts";
    default:
        throw new IllegalArgumentException("Unsupported URI: " + uri);
    }
}

@Override
public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {

    //Find the row ID and use it as a filename
    String rowID = uri.getPathSegments().get(1);

    //Create a file object in the applications external files directory
    String picsDir = Environment.DIRECTORY_PICTURES;
    File file = new File(getContext().getExternalFilesDir(picsDir), rowID);

    if(!file.exists()) {
        try{
            file.createNewFile();
        } catch (IOException e) {
            //Log.d(TAG, "File creation failed: " + e.getMessage());
        }
    }

    //Translate the mode parameter to the corresponding Parcel File Descriptor open mode
    int fileMode = 0;
    if(mode.contains("w"))
        fileMode |= ParcelFileDescriptor.MODE_WRITE_ONLY;
    if(mode.contains("r"))
        fileMode |= ParcelFileDescriptor.MODE_READ_ONLY;
    if(mode.contains("+"))
        fileMode |= ParcelFileDescriptor.MODE_APPEND;

    return ParcelFileDescriptor.open(file, fileMode);
}

private class MySQLiteOpenHelper extends SQLiteOpenHelper {     //used to be static

    public static final String DATABASE_TABLE = "hv_kontakte";
    private static final String DATABASE_CREATE = 
            "CREATE TABLE " + DATABASE_TABLE + "(" + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                    KEY_TYPE + " TEXT, " + KEY_CLTYP + " TEXT, " + KEY_MDT + " INTEGER, " + KEY_OBJ + " INTEGER, "
                    + KEY_VTR + " INTEGER, " + KEY_FKZ + " INTEGER, " + KEY_NAME + " TEXT, " + KEY_VNAME + " TEXT, "
                    + KEY_TEL + " TEXT, " + KEY_FAX + " TEXT, " + KEY_MOBIL + " TEXT, " + KEY_EMAIL + " TEXT)";

    public MySQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version){
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase database) {
        database.execSQL(DATABASE_CREATE);
        hvkContentProvider.this.insertSomeContacts();
    }

    @Override
    public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {
        database.execSQL("DROP TABLE IF EXISTS" + DATABASE_TABLE);
        onCreate(database);
    }
}

}

HdwFragment.java

public class HdwFragment extends Fragment{

private SimpleCursorAdapter hdwDataAdapter;
private ListView listview;
public static final String ARG_SECTION_NUMBER = "section_number";
private static final String TAG = "HdwFragment";
public HdwFragment(){}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState){

    Context context = getActivity();
    View rootView = inflater.inflate(R.layout.fragment_all,container, false);
    TextView dummyTextView = (TextView) rootView.findViewById(R.id.section_label);
    dummyTextView.setText("Dienstleister");
    //android.support.v4.app.LoaderManager loaderManager = getLoaderManager();

    Log.i(TAG, "Before getContentResolver");
    ContentResolver cr = context.getContentResolver();
    Log.i(TAG, "Before result_columns");
    String[] result_columns = new String[] {
            hvkContentProvider.KEY_ID,
            hvkContentProvider.KEY_TYPE,
            hvkContentProvider.KEY_CLTYP,
            hvkContentProvider.KEY_NAME,
            hvkContentProvider.KEY_VNAME
    };
    Log.i(TAG, "Before where,whereArgs and order");
    String where = null;
    String whereArgs[] = null;
    String order = null;
    Log.i(TAG, "Before resultCursor action");
    Log.i(TAG, "hvkContentProvider URI: " + hvkContentProvider.CONTENT_URI);
    Cursor resultCursor = cr.query(hvkContentProvider.CONTENT_URI, result_columns, where, whereArgs, order);
    Log.i(TAG, "resultCursor = " + resultCursor);
    Log.i(TAG, "Before fromColumns");
    String[] fromColumns = new String[]{
            hvkContentProvider.KEY_TYPE,
            hvkContentProvider.KEY_CLTYP,
            hvkContentProvider.KEY_NAME,
            hvkContentProvider.KEY_VNAME    
    };
    Log.i(TAG, "Before toViews");
    int[] toViews = new int[]{
        R.id.contactType,
        R.id.contactCltype,
        R.id.contactName,
        R.id.contactVname
    };
    Log.i(TAG, "Before Adapter");
    hdwDataAdapter = new SimpleCursorAdapter(getActivity(), R.layout.object_list_item, resultCursor, fromColumns, toViews, 0);
    listview = (ListView) rootView.findViewById(R.id.list_all);
    listview.setAdapter(hdwDataAdapter);
    Log.i(TAG, "Before return Layout");
    return (LinearLayout) rootView;
}

@Override
public void onActivityCreated(Bundle savedInstanceState){
    super.onActivityCreated(savedInstanceState);

    //Bundle args = null;
    //loaderManager.initLoader(LOADER_ID, args, loaderCallback);
}

}

The Method: insertSomeFunctions() i have left out since it doesn't make a difference here, gonna put a bounty on this asap. Really need to get this done.

解决方案

<provider android:authorities="de.somename.provider"
    android:enabled="true"
    android:multiprocess="true"
    android:name=".hvkContentProvider"
    android:exported="true" ></provider>

From reference page on <provider>: Link

android:authorities: ......To avoid conflicts, authority names should use a Java-style naming convention (such as com.example.provider.cartoonprovider). Typically, it's the name of the ContentProvider subclass that implements the provider.

In your case, android:authorities should have the value: de.somename.provider.hvkContentProvider.


android:name:...... The name of the class that implements the content provider, a subclass of ContentProvider. This should be a fully qualified class name (such as, "com.example.project.TransportationProvider"). However, as a shorthand, if the first character of the name is a period, it is appended to the package name specified in the element.

So, if you are defining package in the manifest tag of AndroidManifest.xml, make sure hvkContentProvider is in that package. Else, change android:name=".hvkContentProvider" to android:name="de.somename.hvk3.hvkContentProvider" or your.package.name.hvkContentProvider

这篇关于无法找到供应商信息为&LT;定制的提供商GT;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆