Модераторы: javastic
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с кодировкой при записи в БД из файла 
V
    Опции темы
ziga
Дата 25.10.2013, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 25.4.2007

Репутация: нет
Всего: 1



Записываю данные в БД из текстового файла, потом эти данные вывожу через SimpleCursorAdapter, сбивается кодировка, всё перепробовал, ничего не помогает, подскажите, в чём проблема?

BD.class

Код

import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Locale;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class DB {

    private static final String DB_NAME = "mydb";
    private static final int DB_VERSION = 1;
    private static final String DB_TABLE = "booklist";

    public static final String COLUMN_ID = "_id";
    public static final String COLUMN_TXT_HEAD = "nm_text_head";
    public static final String COLUMN_TXT = "nm_text";
    public static final String COLUMN_SCORE = "nn_score";

    private static final String DB_CREATE = "create table " + DB_TABLE + "("
            + COLUMN_ID + " integer primary key autoincrement, "
            + COLUMN_TXT_HEAD + " text, " + COLUMN_TXT + " text, "
            + COLUMN_SCORE + " integer" + ");";

    private final Context mContext;

    private DBHelper mDBHelper;
    private SQLiteDatabase mDB;

    public DB(Context ctx) {
        mContext = ctx;
    }

    // открыть подключение
    public void open() {
        mDBHelper = new DBHelper(mContext, DB_NAME, null, DB_VERSION);
        mDB = mDBHelper.getWritableDatabase();
    }

    // закрыть подключение
    public void close() {
        if (mDBHelper != null)
            mDBHelper.close();
    }

    // получить все данные из таблицы DB_TABLE
    public Cursor getAllData() {
        return mDB.query(DB_TABLE, null, null, null, null, null, null);
    }

    // класс по созданию и управлению БД
    private class DBHelper extends SQLiteOpenHelper {

        public DBHelper(Context context, String name, CursorFactory factory,
                int version) {
            super(context, name, factory, version);
        }

        private ArrayList<String> getData(String file_name) {

            InputStream stream = null;

            ArrayList<String> list = new ArrayList<String>();

            try {
                stream = mContext.getAssets().open(file_name);
            } catch (IOException e) {

            }

            DataInputStream dataStream = new DataInputStream(stream);
            String data = "";
            try {
                while ((data = dataStream.readLine()) != null) {
                    list.add(data);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }

            return list;
        }

        // создаем и заполняем БД
        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(DB_CREATE);

            ArrayList<String> list = getData("bookList.txt");

            if (db != null) {

                ContentValues values;

                for (String data : list) {
                    String[] row = data.split(";");

                    values = new ContentValues();
                    values.put(COLUMN_TXT_HEAD, row[1]);
                    values.put(COLUMN_TXT, row[2]);
                    values.put(COLUMN_SCORE, 0);
                    db.insert(DB_TABLE, null, values);
                }
            }
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        }
    }
}


MainActivity.class

Код

public class MainActivity extends Activity {

    ListView lvData;
    DB db;
    SimpleCursorAdapter scAdapter;
    Cursor cursor;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // открываем подключение к БД
        db = new DB(this);
        db.open();

        // получаем курсор
        cursor = db.getAllData();
        startManagingCursor(cursor);

        // формируем столбцы сопоставления
        String[] from = new String[] { DB.COLUMN_TXT_HEAD, DB.COLUMN_TXT,
                DB.COLUMN_SCORE };
        int[] to = new int[] { R.id.tvTextHead, R.id.tvText, R.id.tvTextScore };

        // создааем адаптер и настраиваем список
        scAdapter = new SimpleCursorAdapter(this, R.layout.item, cursor, from,
                to);
        lvData = (ListView) findViewById(R.id.lvData);
        lvData.setAdapter(scAdapter);

        // добавляем контекстное меню к списку
        // registerForContextMenu(lvData);
    }

    public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
    }

    protected void onDestroy() {
        super.onDestroy();
        // закрываем подключение при выходе
        db.close();
    }
}

PM MAIL   Вверх
ziga
Дата 26.10.2013, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 25.4.2007

Репутация: нет
Всего: 1



Проблема решилась, подправил процедуру getData, и сохранил фал в UTF-8

Код

private ArrayList<String> getData(String file_name) {

            ArrayList<String> list = new ArrayList<String>();

            try {
                // открываем поток для чтения
                BufferedReader br = new BufferedReader(new InputStreamReader(
                        mContext.getAssets().open(file_name)));
                String str = "";

                // читаем содержимое
                while ((str = br.readLine()) != null) {
                    list.add(str);
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

            return list;
        }


Это сообщение отредактировал(а) ziga - 26.10.2013, 10:36
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Android | Следующая тема »


 




[ Время генерации скрипта: 0.0800 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.