1

Android でデータベースを作成していますが、すべて順調に進んでいましたが、正しいデータを取得するクエリをテストしていたときにエラーが発生しました。

E/AndroidRuntime(14126): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0

クエリに一致するデータがないことを意味することはわかっていますが、実際には、クエリによってデータを挿入したところ、実際には一致しています。同じクエリが、アクセントのないすべてのコードで機能します。

これらは、行を挿入するためのクエリです。

INSERT INTO "codigo" VALUES('A','PEATÓN');
INSERT INTO "codigo" VALUES('B','PEATÓN');
INSERT INTO "codigo" VALUES('C','PEATÓN');

そこで、次のように、置換するフィールドの値を取得するクエリを実行しました。

String selectCode = "select distinct c.tipo from codigo c";
Cursor cursor = database.rawQuery(selectCodigo, new String[] {});
      cursor.moveToFirst();
        while (!cursor.isAfterLast()) {
          String codigo= cursor.getString(0);
          codigos.add(codigo);        
          System.out.println(codigo);
          cursor.moveToNext();
        } 
        cursor.close();
      return codigos;

そして結果はこれでした:

10-14 16:40:32.140: I/System.out(13716): PEAT�N

/raw フォルダーにテキスト ファイルがあり、Eclipse から編集したので、テーブルのエクスポートではないことを確認しましたが、同じ結果が得られました。

これは、ファイルを読み取るコードです。

 public int insertFromFile(SQLiteDatabase db,Context context, int resourceId) throws IOException {
            // Reseting Counter
            int result = 0;
            // Open the resource
            InputStream insertsStream = context.getResources().openRawResource(resourceId);
            BufferedReader insertReader = new BufferedReader(new InputStreamReader(insertsStream));

            // Iterate through lines (assuming each insert has its own line and theres no other stuff)
            while (insertReader.ready()) {
                String insertStmt = insertReader.readLine();
                db.execSQL(insertStmt);
                result++;
            }
            insertReader.close();

            // returning number of inserted rows
            return result;
        } 

どうすればそのアクセントを機能させることができますか? 私はそれらの多くを使用しているので、単語を置き換えることは方法ではありません. 助けてください。このプロジェクトを完了するために必要なのはそれだけです。

更新:同じ問題がさらに2回発生しました。最初に、cp1525 でコーディングされた .sql ファイルを操作して修正し、デフォルトのエディターを使用して Eclipse で開き、間違った文字を見つけて置き換えました。

前回このエラーが発生したとき、正しい方法で作成しました.SQLiteManagerを使用している場合、UTF-8でエンコードされたファイルをインポートしますが、ANSIでファイルをエクスポートすることがわかったので、Notepad ++でファイルを開き、 .sql ファイルを ANSI から UTF-8 にエンコードすると、正常に動作し、すべての文字が正常に表示されました。

4

2 に答える 2

1

InputStreamReader コンストラクターのドキュメントには、次のように記載されています。

InputStreamReaderに新しいを構築しInputStream inます。このコンストラクターは、文字コンバーターを "file.encoding" プロパティで指定されたエンコーディングに設定し、プロパティが存在しない場合は ISO 8859_1 (ISO-Latin-1) にフォールバックします。

ファイルが UTF-8 でエンコードされている場合は、リーダーにこれを伝える必要があります。

于 2013-10-17T13:38:38.577 に答える