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;
}
どんな助けでも大歓迎です。