2012-12-06 47 views
2

嗨,这是我的代码来从用户字典中获取单词。这是我的代码,但我不能够运行它...访问用户字典android

private String getwordlist() { 

     String[] mSelectionArgs={""}; 


    String[] mProjection ={UserDictionary.Words._ID, UserDictionary.Words.WORD, UserDictionary.Words.FREQUENCY}; 
    String mSelectionClause = null; 

    String mSortOrder = null; 

    mCursor = getContentResolver().query(
      UserDictionary.Words.CONTENT_URI, // The content URI of the words table 
      mProjection,      // The columns to return for each row 
      mSelectionClause,    // Either null, or the word the user entered 
      mSelectionArgs,     // Either empty, or the string the user entered 
      mSortOrder);      // The sort order for the returned rows 


    if (mCursor.moveToFirst()) {    
      do {    
       String id = mCursor.getString(mCursor.getColumnIndex(UserDictionary.Words._ID));   
       String word = mCursor.getString(mCursor.getColumnIndex(UserDictionary.Words.WORD)); 
       String freq= mCursor.getString(mCursor.getColumnIndex(UserDictionary.Words.FREQUENCY)); 
       str=str+" id: "+id+" word: "+" frequency: "+freq+"\n"; 
       System.out.println(str); 
      } while(mCursor.moveToNext()); 
      return str; 
    } 
    return null;   
} 

我收到错误

12-06 18:49:58.586: E/AndroidRuntime(17174): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myfirstapp/com.example.myfirstapp.ScrollView}: java.lang.IllegalArgumentException: Cannot bind argument at index 1 because the index is out of range. The statement has 0 parameters. 

什么是这个错误..

回答

1

好像当mSelectionClause为null,mSelectionArgs也必须为null。

// If the word is the empty string, gets everything 
if (TextUtils.isEmpty(searchWord)) { 
    // Setting the selection clause to null will return all words 
    mSelectionClause = null; 
    mSelectionArgs = null; 
} else { 
    // Constructs a selection clause that matches the word that the user entered 
    mSelectionClause = UserDictionary.Words.WORD + " = ?"; 
    // Moves the user's input to the selection arguments 
    mSelectionArgs = new String[] {searchWord}; 
} 

// Does a query against the table and returns a Cursor object 
Cursor cursor = getContentResolver().query(
    UserDictionary.Words.CONTENT_URI, // The content URI of the words table 
    mProjection,      // The columns to return for each row 
    mSelectionClause,     // Either null, or the word the user entered 
    mSelectionArgs,     // Either empty, or the string the user entered 
    null); 
+0

这对我有用:) – user2065636

+0

你为什么这么说?如果您查看Content Provider Basics的开发人员文档,您将看到他们的示例“构建查询”。它与你所说的相矛盾:http://developer.android.com/guide/topics/providers/content-provider-basics.html#AltForms –

0

我认为你的while while循环有缺陷。对于内容提供商(http://developer.android.com/guide/topics/providers/content-provider-basics.html#AltForms)的开发者文档给出了下面的示例代码:

/* 
* Only executes if the cursor is valid. The User Dictionary Provider returns null if 
* an internal error occurs. Other providers may throw an Exception instead of returning null. 
*/ 

if (mCursor != null) { 
    /* 
    * Moves to the next row in the cursor. Before the first movement in the cursor, the 
    * "row pointer" is -1, and if you try to retrieve data at that position you will get an 
    * exception. 
    */ 
    while (mCursor.moveToNext()) { 

     // Gets the value from the column. 
     newWord = mCursor.getString(index); 

     // Insert code here to process the retrieved word. 

     ... 

     // end of while loop 
    } 
} else { 

    // Insert code here to report an error if the cursor is null or the provider threw an exception. 
} 

你可以尝试用这样的逻辑来返工你的代码?