问题
CursorLoader 实例化似乎使用了先前 CursorLoader 的 URI,而不是作为参数传入的 URI。
CursorLoader cursor = new CursorLoader(this, FLASHCARD_CONTENT_URI,
FLASHCARD_FROM, null, null, null);
给出以下错误:
no such column: front (code 1): , while compiling:
SELECT _ID, front, back, FROM deck
课程
- DeckIndex.java - 负责查询数据库“甲板”表并返回甲板的游标数组。
- DeckShow.java - 负责查询数据库“flashcard”表并返回一个Cursor数组的flashcards。
- AducardOpenHelper.java - 负责数据库的 DDL 和创建。
- DecksProvider - 负责“甲板”表的 CRUD
- FlashcardsProvider - 负责“flashcard”表的 CRUD
解释
正在传递的 URI:
public static final Uri FLASHCARD_CONTENT_URI =
Uri.parse("content://" + AUTHORITY + "/" + FLASHCARD_TABLE_NAME);
我知道这是由 DecksProvider 而不是 FlashcardsProvider 处理的。
以及 FlashcardsProvider 中的 UriMatcher:
@Override
public boolean onCreate(){
uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
uriMatcher.addURI(AUTHORITY, "flashcard", FLASHCARDS);
auducards = new AuducardOpenHelper(getContext());
return true;
}
我认为重要的是要提到首先调用 DecksIndex 类,因此对 DeckProvider 的调用成功完成。直到我在调用 DeckShow onCreate 方法时单击其中一个牌组(它启动了 DeckShow 活动):
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getLoaderManager().initLoader(1, null, this);
setContentView(R.layout.activity_deck_show);
mAdapter = new SimpleCursorAdapter(this, R.layout.flashcard_item, null,
FLASHCARD_FROM, FLASHCARD_TO, 0 );
Intent intent = getIntent();
String message = intent.getStringExtra(DeckIndex.EXTRA_MESSAGE);
}
并发生错误。
LoaderManager 初始化行:
甲板索引.java
getLoaderManager().initLoader(0, null, this);
甲板秀.java
getLoaderManager().initLoader(1, null, this);
感谢您查看我的问题,如果有任何其他详细信息或代码有帮助,请告诉我!