如何修复android内容提供商中未找到的内容提供商url?

如何修复android内容提供商中未找到的内容提供商url?,android,android-sqlite,android-contentprovider,Android,Android Sqlite,Android Contentprovider,我遵循了以下教程 但是在点击“确认”按钮后得到这个异常 TodoDetailActivity public class TodoDetailActivity extends Activity { private Spinner mCategory; private EditText mTitleText; private EditText mBodyText; private Uri todoUri; @Override protected

我遵循了以下教程

但是在点击“确认”按钮后得到这个异常

TodoDetailActivity

public class TodoDetailActivity extends Activity {

    private Spinner mCategory;
    private EditText mTitleText;
    private EditText mBodyText;

    private Uri todoUri;

    @Override
    protected void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        setContentView(R.layout.todo_edit);

        mCategory = (Spinner) findViewById(R.id.category);
        mTitleText = (EditText) findViewById(R.id.todo_edit_summary);
        mBodyText = (EditText) findViewById(R.id.todo_edit_description);
        Button confirmButton = (Button) findViewById(R.id.todo_edit_button);

        Bundle extras = getIntent().getExtras();

        // check from the saved Instance
        todoUri = (bundle == null) ? null : (Uri) bundle
                .getParcelable(MyTodoContentProvider.CONTENT_ITEM_TYPE);

        // Or passed from the other activity
        if (extras != null) {
            todoUri = extras
                    .getParcelable(MyTodoContentProvider.CONTENT_ITEM_TYPE);

            fillData(todoUri);
        }

        confirmButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                if (TextUtils.isEmpty(mTitleText.getText().toString())) {
                    makeToast();
                } else {
                    setResult(RESULT_OK);
                    finish();
                }
            }

        });
    }

    private void fillData(Uri uri) {
        String[] projection = { TodoTable.COLUMN_SUMMARY,
                TodoTable.COLUMN_DESCRIPTION, TodoTable.COLUMN_CATEGORY };
        Cursor cursor = getContentResolver().query(uri, projection, null, null,
                null);
        if (cursor != null) {
            cursor.moveToFirst();
            String category = cursor.getString(cursor
                    .getColumnIndexOrThrow(TodoTable.COLUMN_CATEGORY));

            for (int i = 0; i < mCategory.getCount(); i++) {

                String s = (String) mCategory.getItemAtPosition(i);
                if (s.equalsIgnoreCase(category)) {
                    mCategory.setSelection(i);
                }
            }

            mTitleText.setText(cursor.getString(cursor
                    .getColumnIndexOrThrow(TodoTable.COLUMN_SUMMARY)));
            mBodyText.setText(cursor.getString(cursor
                    .getColumnIndexOrThrow(TodoTable.COLUMN_DESCRIPTION)));

            // always close the cursor
            cursor.close();
        }
    }

    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        saveState();
        outState.putParcelable(MyTodoContentProvider.CONTENT_ITEM_TYPE, todoUri);
    }

    @Override
    protected void onPause() {
        super.onPause();
        saveState();
    }

    private void saveState() {
        String category = (String) mCategory.getSelectedItem();
        String summary = mTitleText.getText().toString();
        String description = mBodyText.getText().toString();

        // only save if either summary or description
        // is available

        if (description.length() == 0 && summary.length() == 0) {
            return;
        }

        ContentValues values = new ContentValues();
        values.put(TodoTable.COLUMN_CATEGORY, category);
        values.put(TodoTable.COLUMN_SUMMARY, summary);
        values.put(TodoTable.COLUMN_DESCRIPTION, description);

        if (todoUri == null) {
            // New todo
            todoUri = getContentResolver().insert(
                    MyTodoContentProvider.CONTENT_URI, values);
        } else {
            // Update todo
            getContentResolver().update(todoUri, values, null, null);
        }
    }

    private void makeToast() {
        Toast.makeText(TodoDetailActivity.this, "Please maintain a summary",
                Toast.LENGTH_LONG).show();
    }
}
您正在使用

private static final String AUTHORITY =  "com.example.todos.contentprovider";
// It should same as you defined in manifest
那么这个

Caused by: java.lang.IllegalArgumentException: Unknown URL content://com.example.todos.contentprovider/todos 
因此,请确保在
manifest.xml

<provider
       android:authorities="com.example.todos.contentprovider"
       android:name=".YOUR_ContentProvider" >
</provider> 


希望这对您有用。

还要确保在manifest.xml中提供android:exported=“true”,还要确保它们放在
中,而不是

<provider
        android:name="com.example.todos.contentprovider"
        android:authorities="com.example.todos.contentprovider.MyTodoContentProvider"
        android:exported="true">
    </provider>


找不到您试图打开的URL com.example.todos.contentprovider/todos。一旦更改此设置,在权威机构中写入整个软件包名称就解决了我的问题如果我不想导出我的内容提供商该怎么办谢谢,你帮了我的忙:)
Caused by: java.lang.IllegalArgumentException: Unknown URL content://com.example.todos.contentprovider/todos 
<provider
       android:authorities="com.example.todos.contentprovider"
       android:name=".YOUR_ContentProvider" >
</provider> 
<provider
        android:name="com.example.todos.contentprovider"
        android:authorities="com.example.todos.contentprovider.MyTodoContentProvider"
        android:exported="true">
    </provider>