Java E/ActivityThread:未能找到com.example.honore.nativedictionary.DictionaryProvider的提供程序信息

Java E/ActivityThread:未能找到com.example.honore.nativedictionary.DictionaryProvider的提供程序信息,java,android,Java,Android,我导入的可搜索字典应用程序有问题 github;任何帮助都将不胜感激 我可以启动应用程序并键入要搜索的单词,但是,没有 即使我键入了一个我确信在列表中的单词,结果也会显示出来 字典(定义文件)。而且,这个建议也不起作用。请 帮我解决这个问题。提前感谢您的帮助 package com.example.hodah01.nativedictionary; import android.app.SearchManager; import android.support.v4.widget.Simple

我导入的可搜索字典应用程序有问题 github;任何帮助都将不胜感激

我可以启动应用程序并键入要搜索的单词,但是,没有 即使我键入了一个我确信在列表中的单词,结果也会显示出来 字典(定义文件)。而且,这个建议也不起作用。请 帮我解决这个问题。提前感谢您的帮助

package com.example.hodah01.nativedictionary;

import android.app.SearchManager;
import android.support.v4.widget.SimpleCursorAdapter;
import android.content.ContentProvider;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.net.Uri;
import android.provider.BaseColumns;

public class DictionaryProvider extends ContentProvider {
String TAG = "DictionaryProvider";


public static String AUTHORITY = 
"com.example.hodah1.nativedictionary.DictionaryProvider";
public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY 
+ "/dictionary");

// MIME types used for searching words or looking up a single definition
public static final String WORDS_MIME_TYPE =  
ContentResolver.CURSOR_DIR_BASE_TYPE +
"/vnd.example.hodah1.nativedictionary";
public static final String DEFINITION_MIME_TYPE = 
ContentResolver.CURSOR_ITEM_BASE_TYPE +
"/vnd.example.hodah1.nativedictionary";

private DictionaryDatabase mDictionary;

// UriMatcher stuff
private static final int SEARCH_WORDS = 0;
private static final int GET_WORD = 1;
private static final int SEARCH_SUGGEST = 2;
private static final int REFRESH_SHORTCUT = 3;
private static final UriMatcher sURIMatcher = buildUriMatcher();


/**
 * Builds up a UriMatcher for search suggestion and shortcut refresh 
   queries.
 */
private static UriMatcher buildUriMatcher() {
UriMatcher matcher =  new UriMatcher(UriMatcher.NO_MATCH);
    // to get definitions...
    matcher.addURI(AUTHORITY, "dictionary", SEARCH_WORDS);
    matcher.addURI(AUTHORITY, "dictionary/#", GET_WORD);
    // to get suggestions...
    matcher.addURI(AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY, 
    SEARCH_SUGGEST);
    matcher.addURI(AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY + "/*",
    SEARCH_SUGGEST);



    matcher.addURI(AUTHORITY, SearchManager.SUGGEST_URI_PATH_SHORTCUT, 
    REFRESH_SHORTCUT);
    matcher.addURI(AUTHORITY, SearchManager.SUGGEST_URI_PATH_SHORTCUT 
    + "/*", REFRESH_SHORTCUT);
    return matcher;}


@Override
public boolean onCreate() {
    mDictionary = new DictionaryDatabase(getContext());
    return true;
}


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


// Use the UriMatcher to see what kind of query we have and format the db 
query accordingly switch (sURIMatcher.match(uri)) {case SEARCH_SUGGEST:
            if (selectionArgs == null) {
                throw new IllegalArgumentException(
                     "selectionArgs must be provided for the Uri: " + uri);
            }
            return getSuggestions(selectionArgs[0]);
        case SEARCH_WORDS:
            if (selectionArgs == null) {
                throw new IllegalArgumentException(
                        "selectionArgs must be provided for the Uri: " + 
                         uri);
            }
            return search(selectionArgs[0]);
        case GET_WORD:
            return getWord(uri);
        case REFRESH_SHORTCUT:
            return refreshShortcut(uri);
        default:
            throw new IllegalArgumentException("Unknown Uri: " + uri);
    }
}


private Cursor getSuggestions(String query) {
    query = query.toLowerCase();
    String[] columns = new String[] {
            BaseColumns._ID,
            DictionaryDatabase.KEY_WORD,
            DictionaryDatabase.KEY_DEFINITION,
    /* SearchManager.SUGGEST_COLUMN_SHORTCUT_ID,
                     (only if you want to refresh shortcuts) */
            SearchManager.SUGGEST_COLUMN_INTENT_DATA_ID};


    return mDictionary.getWordMatches(query, columns);
}


private Cursor search(String query) {
    query = query.toLowerCase();
    String[] columns = new String[] {
            BaseColumns._ID,
            DictionaryDatabase.KEY_WORD,
            DictionaryDatabase.KEY_DEFINITION};


    return mDictionary.getWordMatches(query, columns);
}


private Cursor getWord(Uri uri) {
    String rowId = uri.getLastPathSegment();
    String[] columns = new String[] {
            DictionaryDatabase.KEY_WORD,
            DictionaryDatabase.KEY_DEFINITION};


    return mDictionary.getWord(rowId, columns);
}


private Cursor refreshShortcut(Uri uri) {
           String rowId = uri.getLastPathSegment();
    String[] columns = new String[] {
            BaseColumns._ID,
            DictionaryDatabase.KEY_WORD,
            DictionaryDatabase.KEY_DEFINITION,
            SearchManager.SUGGEST_COLUMN_SHORTCUT_ID,
            SearchManager.SUGGEST_COLUMN_INTENT_DATA_ID};


    return mDictionary.getWord(rowId, columns);
}


@Override
public String getType(Uri uri) {
    switch (sURIMatcher.match(uri)) {
        case SEARCH_WORDS:
            return WORDS_MIME_TYPE;
        case GET_WORD:
            return DEFINITION_MIME_TYPE;
        case SEARCH_SUGGEST:
            return SearchManager.SUGGEST_MIME_TYPE;
        case REFRESH_SHORTCUT:
            return SearchManager.SHORTCUT_MIME_TYPE;
        default:
            throw new IllegalArgumentException("Unknown URL " + uri);
    }
}


// Other required implementations...


@Override
public Uri insert(Uri uri, ContentValues values) {
    throw new UnsupportedOperationException();
}

@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
    throw new UnsupportedOperationException();
}


@Override
public int update(Uri uri, ContentValues values, String selection, String[]
selectionArgs) {
    throw new UnsupportedOperationException();
}
}

package com.example.hodah01.nativedictionary;

import android.app.Activity;
import android.app.ActionBar;
import android.app.SearchManager;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SearchView;
import android.support.v4.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;
import android.support.v7.app.ActionBarActivity;


public class SearchableDictionary extends Activity{

private TextView mTextView;
private ListView mListView;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);


    mTextView = (TextView) findViewById(R.id.text);
    mListView = (ListView) findViewById(R.id.list);


    handleIntent(getIntent());
}


@Override
protected void onNewIntent(Intent intent) {
handleIntent(intent);
}


private void handleIntent(Intent intent) {
    if (Intent.ACTION_VIEW.equals(intent.getAction()))
    {
        Intent wordIntent = new Intent(this, WordActivity.class);
        wordIntent.setData(intent.getData());
        startActivity(wordIntent);
    }
    else if (Intent.ACTION_SEARCH.equals(intent.getAction()))
    {
        // handles a search query
        String query = intent.getStringExtra(SearchManager.QUERY);
        showResults(query);
    }
}


private void showResults(String query) 
{

    Cursor cursor = getContentResolver().quer
    (DictionaryProvider.CONTENT_URI, null, null,
            new String[] {query}, null);


    if (cursor == null)
    {
        // There are no results
        mTextView.setText(getString(R.string.no_results, new Object[] 
        {query}));
    }
    else
    {
        // Display the number of results
        int count = cursor.getCount();
        String countString = getResources().getQuantityString
        (R.plurals.search_results,
                count, new Object[] {count, query});
        mTextView.setText(countString);

        // Specify the columns we want to display in the result
        String[] from = new String[] { DictionaryDatabase.KEY_WORD,
                DictionaryDatabase.KEY_DEFINITION };


                int[] to = new int[] { R.id.word,R.id.definition };



        SimpleCursorAdapter words = new SimpleCursorAdapter(this,
        R.layout.result, cursor, from, to, 1);
        mListView.setAdapter(words);


        // Define the on-click listener for the list items
        mListView.setOnItemClickListener(new OnItemClickListener() {


        @Override
        public void onItemClick(AdapterView<?> parent, View view, int 
        position, long id) {
        Intent wordIntent = new Intent(getApplicationContext(), 
        WordActivity.class);
                Uri data = Uri.withAppendedPa
                 (DictionaryProvider.CONTENT_URI,
                        String.valueOf(id));
                wordIntent.setData(data);
                startActivity(wordIntent);
            }
        });
    }
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.options_menu, menu);


    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){
        SearchManager searchManager = (SearchManager) getSystemService
        (Context.SEARCH_SERVICE);
        SearchView searchView = (SearchView) menu.findItem
        (R.id.search).getActionView();
        searchView.setSearchableInfo(searchManager.getSearchableInfo
        (getComponentName()));
        searchView.setIconifiedByDefault(false);
    }


    return true;
}


@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.search:
            onSearchRequested();
            return true;
        default:
            return false;
    }
}
}


package com.example.hodah01.nativedictionary;

import android.app.Activity;
import android.app.ActionBar;
import android.app.SearchManager;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SearchView;
import android.support.v4.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;
import android.support.v7.app.ActionBarActivity;


/**
 * The main activity for the dictionary.
 * Displays search results triggered by the search dialog and handles
 * actions from search suggestions.
 */
public class SearchableDictionary extends Activity{


private TextView mTextView;
private ListView mListView;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);


    mTextView = (TextView) findViewById(R.id.text);
    mListView = (ListView) findViewById(R.id.list);


    handleIntent(getIntent());
}


@Override
protected void onNewIntent(Intent intent) {
           handleIntent(intent);
}


private void handleIntent(Intent intent) {
    if (Intent.ACTION_VIEW.equals(intent.getAction()))
    {
        Intent wordIntent = new Intent(this, WordActivity.class);
        wordIntent.setData(intent.getData());
        startActivity(wordIntent);
    }
    else if (Intent.ACTION_SEARCH.equals(intent.getAction()))
    {
        // handles a search query
        String query = intent.getStringExtra(SearchManager.QUERY);
        showResults(query);
    }
}


/**
 * Searches the dictionary and displays results for the given query.
 * @param query The search query
 */
private void showResults(String query) {


    Cursor cursor = getContentResolver().query
    (DictionaryProvider.CONTENT_URI, null, null,new String[] {query}, null);


    if (cursor == null)
    {
        // There are no results
        mTextView.setText(getString(R.string.no_results, new Object[] 
    {query}));
    }
    else
    {
        // Display the number of results
        int count = cursor.getCount();
        String countString = getResources().getQuantityString
(R.plurals.search_results,
                count, new Object[] {count, query});
        mTextView.setText(countString);


        // Specify the columns we want to display in the result
        String[] from = new String[] { DictionaryDatabase.KEY_WORD,
                DictionaryDatabase.KEY_DEFINITION };

                    int[] to = new int[] { R.id.word,
                R.id.definition };

        SimpleCursorAdapter words = new SimpleCursorAdapter(this, 
R.layout.result, cursor, from, to, 1);
        mListView.setAdapter(words);


        // Define the on-click listener for the list items
        mListView.setOnItemClickListener(new OnItemClickListener() {


            @Override
            public void onItemClick(AdapterView<?> parent, View view, int 
position, long id) {
Intent wordIntent = new Intent(getApplicationContext(), WordActivity.class);
                Uri data = Uri.withAppendedPath
(DictionaryProvider.CONTENT_URI,
                        String.valueOf(id));
                wordIntent.setData(data);
                startActivity(wordIntent);
            }
        });
    }
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.options_menu, menu);


    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){
        SearchManager searchManager = (SearchManager) getSystemService
(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem
(R.id.search).getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo
(getComponentName()));
        searchView.setIconifiedByDefault(false);
    }


    return true;
}


@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.search:
            onSearchRequested();
            return true;
        default:
            return false;
    }
}
}
package com.example.hodah01.nativedictionary;
导入android.app.SearchManager;
导入android.support.v4.widget.SimpleCursorAdapter;
导入android.content.ContentProvider;
导入android.content.ContentResolver;
导入android.content.ContentValues;
导入android.content.UriMatcher;
导入android.database.Cursor;
导入android.net.Uri;
导入android.provider.BaseColumns;
公共类DictionaryProvider扩展了ContentProvider{
String TAG=“DictionaryProvider”;
公共静态字符串授权=
“com.example.hodah1.nativedictionary.DictionaryProvider”;
公共静态最终Uri内容\u Uri=Uri.parse(“内容:/”+权限
+“/字典”);
//用于搜索单词或查找单个定义的MIME类型
公共静态最终字符串单词\u MIME\u类型=
ContentResolver.CURSOR\u DIR\u BASE\u类型+
“/vnd.example.hodah1.nativedictionary”;
公共静态最终字符串定义\u MIME\u类型=
ContentResolver.CURSOR\u项\u基\u类型+
“/vnd.example.hodah1.nativedictionary”;
专用词典数据库mDictionary;
//乌里马彻材料
私有静态最终整型搜索_WORDS=0;
私有静态final int GET_WORD=1;
私有静态最终整数搜索\u建议=2;
私有静态最终整型刷新\快捷方式=3;
私有静态最终UriMatcher sURIMatcher=buildUriMatcher();
/**
*为搜索建议和快捷方式刷新建立UriMatcher
查询。
*/
私有静态UriMatcher buildUriMatcher(){
UriMatcher matcher=新的UriMatcher(UriMatcher.NO_匹配);
//要获得定义。。。
addURI(权威,“词典”,搜索单词);
addURI(权威,“dictionary/#”,GET_WORD);
//要获得建议。。。
matcher.addURI(AUTHORITY,SearchManager.SUGGEST\u URI\u PATH\u QUERY,
搜索(建议);
matcher.addURI(AUTHORITY,SearchManager.SUGGEST\u URI\u PATH\u QUERY+“/*”,
搜索(建议);
matcher.addURI(AUTHORITY,SearchManager.SUGGEST\u URI\u PATH\u快捷方式,
刷新(U快捷方式);
matcher.addURI(AUTHORITY,SearchManager.SUGGEST\u URI\u PATH\u快捷方式
+“/*”,刷新快捷方式);
返回匹配器;}
@凌驾
公共布尔onCreate(){
mDictionary=新字典数据库(getContext());
返回true;
}
@凌驾
公共游标查询(Uri、字符串[]投影、字符串选择、字符串
[]selectionArgs,字符串排序器){
//使用UriMatcher查看我们的查询类型并格式化数据库
查询相应开关(sURIMatcher.match(uri)){case SEARCH\u SUGGEST:
如果(SelectionAgs==null){
抛出新的IllegalArgumentException(
“必须为Uri提供selectionArgs:”+Uri);
}
返回getSuggestions(SelectionAgs[0]);
案例搜索\u词:
如果(SelectionAgs==null){
抛出新的IllegalArgumentException(
“必须为Uri提供selectionArgs:”+
uri);
}
返回搜索(SelectionAgs[0]);
case-GET_-WORD:
返回getWord(uri);
案例刷新快捷方式:
返回刷新快捷方式(uri);
违约:
抛出新的IllegalArgumentException(“未知Uri:+Uri”);
}
}
私有游标(字符串查询){
query=query.toLowerCase();
字符串[]列=新字符串[]{
BaseColumns.\u ID,
DictionaryDatabase.KEY\u单词,
DictionaryDatabase.KEY_定义,
/*SearchManager.SUGGEST\u列\u快捷方式\u ID,
(仅当要刷新快捷方式时)*/
SearchManager.SUGGEST\u COLUMN\u INTENT\u DATA\u ID};
返回mDictionary.getWordMatches(查询,列);
}
专用光标搜索(字符串查询){
query=query.toLowerCase();
字符串[]列=新字符串[]{
BaseColumns.\u ID,
DictionaryDatabase.KEY\u单词,
DictionaryDatabase.KEY_DEFINITION};
返回mDictionary.getWordMatches(查询,列);
}
私有游标getWord(Uri){
字符串rowId=uri.getLastPathSegment();
字符串[]列=新字符串[]{
DictionaryDatabase.KEY\u单词,
DictionaryDatabase.KEY_DEFINITION};
返回mDictionary.getWord(rowId,columns);
}
专用游标刷新快捷方式(Uri){
字符串rowId=uri.getLastPathSegment();
字符串[]列=新字符串[]{
BaseColumns.\u ID,
DictionaryDatabase.KEY\u单词,
DictionaryDatabase.KEY_定义,
SearchManager.SUGGEST\u列\u快捷方式\u ID,
SearchManager.SUGGEST\u COLUMN\u INTENT\u DATA\u ID};
返回mDictionary.getWord(rowId,columns);
}
@凌驾
公共字符串getType(Uri){
开关(sURIMatcher.match(uri)){
案例搜索\u词:
返回单词\u MIME\u类型;
case-GET_-WORD:
返回定义\u MIME\u类型;
个案查询(建议):
返回SearchManager.SUGGEST\u MIME\u TYPE;
案例刷新快捷方式:
返回SearchManager.SHORTCUT\u MIME\u类型;
违约:
抛出新的IllegalArgumentException(“未知URL”+uri);
}
}
//其他必需的实现。。。
@凌驾
公共Uri插入(Uri、ContentValues){
抛出新的UnsupportedOperationException();
}
@凌驾
public int delete(Uri、字符串选择、字符串[]selectionArgs){
抛出新的UnsupportedOperationException();
}
@凌驾
公共int更新(Uri、ContentValues值、字符串选择、字符串[]
选择(G){
新的不明嫌犯
<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package = "com.example.hodah01.nativedictionary"
android:versionCode="2"
android:versionName="2.0">

<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="15" />
     <application android:label="@string/app_name"
                  android:icon="@drawable/ic_dictionary">


        <!-- The default activity of the app; displays search results. -->
         <activity android:name=".SearchableDictionary"
                   android:launchMode="singleTop">
             <intent-filter>
             <action android:name="android.intent.action.MAIN" />
             <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>

             <!-- Receives the search request. -->
             <intent-filter>
             <action android:name="android.intent.action.SEARCH" />
                          </intent-filter>


            <!-- Points to searchable meta data. -->
             <meta-data android:name="android.app.searchable"
                        android:resource="@xml/searchable" />


         </activity>


         <!-- Displays the definition of a word. -->
         <activity android:name=".WordActivity" />


<provider android:name="com.example.hodah01.nativedictionary.DictionaryProvider"

android:authorities="com.example.hodah01.nativedictionary.DictionaryProvider"

android:enabled="true"
android:multiprocess="true"
android:exported="true" />

<meta-data android:name="android.app.default_searchable"
android:value=".SearchableDictionary" />
</application>
</manifest>