问题
Hi this is my code to get the words from the user dictionary. this is my code but i am not able to run it...
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;
}
i am getting error
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.
what is the error in this..
回答1:
it seems like that when mSelectionClause is null, mSelectionArgs need to be null too.
// 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);
回答2:
I think your do while loop is flawed. The developer documentation for Content Provider (http://developer.android.com/guide/topics/providers/content-provider-basics.html#AltForms) gives the following sample code:
/*
* 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.
}
Can you try to rework your code with this logic?
来源:https://stackoverflow.com/questions/13744792/access-user-dictionary-android