我正在开发一个Android应用程序,其目的是在屏幕上显示一个列表,其中包含用户词典中的内容。
问题在于,当我在Android API Level 23内部提供程序中编译并运行应用程序时,返回一个没有项目的Cursor,没有任何数据。
这很奇怪,因为应用程序运行的应用程序之前的23(22,21,19,...),并且通常会在ListView中显示数据。
以下是我的活动代码:
import android.app.LoaderManager;
import android.content.CursorLoader;
import android.content.Loader;
import android.database.Cursor;
import android.provider.UserDictionary;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<Cursor> {
private ListView listView;
private SimpleCursorAdapter adapter;
private static final String[] COLUMNS = {
UserDictionary.Words.WORD,
UserDictionary.Words._ID,
UserDictionary.Words.LOCALE
};
private static final int[] LIST_ITEM_VIEWS = {
R.id.name,
R.id.id_word,
R.id.locale
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.list);
adapter = new SimpleCursorAdapter(getApplicationContext(), R.layout.item_list, null, COLUMNS, LIST_ITEM_VIEWS, 0);
listView.setAdapter(adapter);
getLoaderManager().initLoader(0, null, this);
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
return new CursorLoader(getApplicationContext(), UserDictionary.Words.CONTENT_URI, COLUMNS,
null, null, UserDictionary.Words.WORD);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
adapter.swapCursor(data);
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
adapter.swapCursor(null);
}
}
答案 0 :(得分:2)
此处有报道:Android Issue Traker
官方回应:按预期工作。自API 23起,此功能已被有效删除。
答案 1 :(得分:0)
API级别23存在一个问题,即用户字典提供程序返回没有数据的游标,即使填充了字典也是如此。
目前的解决方法是{{1}}。您可以快速创建API级别22模拟器。
答案 2 :(得分:0)
根据UserDictionary的Android官方文档,只有IME
和SpellChecker
可以访问UserDictionary。
检查此页面上的注意:https://developer.android.com/reference/android/provider/UserDictionary.html