嵌套ArrayList和手动数据库条目

时间:2016-03-31 21:06:47

标签: android sqlite arraylist cursor android-recyclerview

我正在使用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

编辑:我已经编辑了数据库本身以容纳完全不同的主题名称,并继续显示以前的主题。我已经从我的测试设备上卸载了应用程序,所以我真的不确定数据的来源。但这肯定与数据库有关。

1 个答案:

答案 0 :(得分:0)

Aaaaaaand,问题解决了。

首先,数据库停滞不前,直到我卸载 AND 重新启动。由于某种原因,简单的卸载是不够的。

我发布的代码按预期工作。只是无法将其他null参数传递给ArrayList(在我添加任何参数之前应该添加一个检查)。一旦我缩小到只有A和B,所有错误都被删除了。

以上是教训:如果您要将手动条目添加到数据库中,则只有在卸载应用程序后才能反映任何更新,然后重新启动。