4

Javaプログラムに入力するsqliteデータベースがあります(ロケールを手動で追加して、Androidで使用できるようにします)。データベース内の各エントリは、本質的に多かれ少なかれ文であり、すべての文を追加して章を作成します。

問題:ときどき (これは 2 台の Ice Cream Sandwich 携帯電話でのみ確認されています) 文の一部が書かれ、次に改行があり、文の一部が重複しているのが見られます。データベースから文を取得した後、かなり巨大なアルゴリズムで文を解析しますが、アプリケーションをアンロード (キャッシュを破棄) し、同じ章を再ロードした後、問題がなくなったため、これは問題ではないようです。差異は、データベースから取得したものから来ているようです。

ユーザーに表示される例:

小さい男の子が贈るプレゼントをもらった 改行 なぜか 男の子が妹にプレゼントするプレゼントをもらった。

いくつかの奇妙な点:データベースには、文番号 (章内の各文の一意の番号)、書籍名、章番号の間に 3 つの列 PK があります。

データベースにアクセスするために使用するコード

    public synchronized List<ChapterElement> getSentenceChapter(SentenceReference sentenceRef) {
        Book book = sentenceRef.getBook();
        Integer chapter = sentenceRef.getChapter();

        String[] columns = {
                SentenceDatabaseHelper.COLUMN_SENTENCE_NUM,
                SentenceDatabaseHelper.COLUMN_SENTENCE_IS_START_OF_PARAGRAPH,
                SentenceDatabaseHelper.COLUMN_SENTENCE_HAS_FOOT_NOTE,
                SentenceDatabaseHelper.COLUMN_SENTENCE_HAS_CROSS_REFERENCE,
                SentenceDatabaseHelper.COLUMN_SENTENCE_CONTENT
        };

        String selection = SentenceDatabaseHelper.COLUMN_SENTENCE_BOOK + "=? AND " 
                + SentenceDatabaseHelper.COLUMN_SENTENCE_CHAPTER + "=?";

        String[] selectionArgs = {book.getShortenedName(), chapter.toString()};

        String orderBy = SentenceDatabaseHelper.COLUMN_SENTENCE_ORDER_NUM + " ASC";

        Cursor cursor = null;
        SQLiteDatabase database = null;

        try {
            database = sentenceDBH.getReadableDatabase();
            cursor = database.query(SentenceDatabaseHelper.TABLE_SENTENCE,
                    columns, selection, selectionArgs, null, null, orderBy);
        } catch (Exception e) {
            Log.e(TAG, "There was an error while accessing the database.", e);
            if (cursor != null) {
                cursor.close();
            }
            if (database != null) {
                database.close();
            }
        }

        int sentenceNumIndex = cursor.getColumnIndex(SentenceDatabaseHelper.COLUMN_SENTENCE_NUM);
        int hasFootNoteIndex = cursor.getColumnIndex(SentenceDatabaseHelper.COLUMN_SENTENCE_HAS_FOOT_NOTE);
        int hasCrossReferenceIndex = cursor.getColumnIndex(SentenceDatabaseHelper.COLUMN_SENTENCE_HAS_CROSS_REFERENCE);
        int isStartOfParagraphIndex = cursor.getColumnIndex(SentenceDatabaseHelper.COLUMN_SENTENCE_IS_START_OF_PARAGRAPH);
        int contentIndex = cursor.getColumnIndex(SentenceDatabaseHelper.COLUMN_SENTENCE_CONTENT);

        List<ChapterElement> chapterElements = new ArrayList<ChapterElement>( cursor.getCount() );
        while ( cursor.moveToNext() ) {
            int sentenceNum = cursor.getInt(sentenceNumIndex);
            boolean hasFootNote = (cursor.getInt(hasFootNoteIndex) == 1) ? true : false;
            boolean hasCrossRef = (cursor.getInt(hasCrossReferenceIndex) == 1) ? true : false;
            boolean isStartOfParagraph = (cursor.getInt(isStartOfParagraphIndex) == 1) ? true : false;
            String content = cursor.getString(contentIndex);

            ChapterElement chapterElement = new ChapterElement(sentenceNum, hasFootNote, hasCrossRef,
                    isStartOfParagraph, content);
            chapterElements.add(chapterElement);
        }

        cursor.close();
        database.close();

        return chapterElements;
    }

どんな助けでも大歓迎です。

4

0 に答える 0