我正在使用Android中的RecyclerView,如下所示:
A
主题1
主题2
主题3
乙
B topic1
B topic2
隐藏主题,直到您点按父母的字母。
我有一些我认为应该正常工作的东西,但现在如果我手动向我的数据库添加行(这是设计),其他行不被识别,即使我卸载了应用程序并重新加载它。这就是我所看到的:
final List<AToZList> aToZ = addTopics();
mAdapter = new AToZAdapter(getContext(), aToZ);
...
private List<AToZList> addTopics() {
topics = new ArrayList<Topic>();
List<AToZList> aToZ;
AToZList A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z;
A=B=C=D=E=F=G=H=I=J=K=L=M=N=O=P=Q=R=S=T=U=V=W=X=Y=Z = null;
Cursor topicCursor = database.rawQuery("SELECT " + ExternalDbContract.QuoteEntry.TOPIC +
" FROM " + ExternalDbContract.QuoteEntry.TABLE_NAME, null);
try {
for (topicCursor.moveToFirst(); !topicCursor.isAfterLast(); topicCursor.moveToNext()) {
String firstLetter = topicCursor.getString(0).toUpperCase().substring(0, 1);
switch (firstLetter) {
case "A":
if(A == null) {
A = new AToZList("A", getTopics(firstLetter));
}
break; //and so on for every letter
}finally {
aToZ = Arrays.asList(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z);
}
topicCursor.close();
return aToZ;
...
private ArrayList<Topic> getTopics(String firstLetter) {
Cursor topicCursor = database.rawQuery("SELECT " + ExternalDbContract.QuoteEntry.TOPIC +
" FROM " + ExternalDbContract.QuoteEntry.TABLE_NAME, null);
ArrayList<Topic> topicsByLetter = new ArrayList<Topic>();
for(topicCursor.moveToFirst(); !topicCursor.isAfterLast(); topicCursor.moveToNext()) {
if (topicCursor.getString(0).toUpperCase().substring(0, 1).equals(firstLetter)) {
topicsByLetter.add(new Topic(topicCursor.getString(0)));
}
}
topicCursor.close();
return topicsByLetter;
}
这是很多代码。
我已经添加了一些日志记录,以查看实际传递的内容。我在数据库中有3个主题条目,其中两个以&#34; A&#34;第三个以&#34; B&#34;开头。 A来得好(有两个条目),然后由于某种原因它踢出了finally块,并且废弃了Array,因为它只有一个条目(如,一个&#34; A&#34;条目)。 topicCursor.getCount()
告诉我,只有两个条目,但有三个条目。当然你是游泳者!
如果它有用,我已经承诺http://api.rubyonrails.org/classes/ActiveRecord/FinderMethods.html#method-i-find_by。
编辑:我已经编辑了数据库本身以容纳完全不同的主题名称,并继续显示以前的主题。我已经从我的测试设备上卸载了应用程序,所以我真的不确定数据的来源。但这肯定与数据库有关。
答案 0 :(得分:0)
Aaaaaaand,问题解决了。
首先,数据库停滞不前,直到我卸载 AND 重新启动。由于某种原因,简单的卸载是不够的。
我发布的代码按预期工作。只是无法将其他null参数传递给ArrayList(在我添加任何参数之前应该添加一个检查)。一旦我缩小到只有A和B,所有错误都被删除了。
以上是教训:如果您要将手动条目添加到数据库中,则只有在卸载应用程序后才能反映任何更新,然后重新启动。