String-array

Интерфейс, диалоги, темы, стили, меню
Ответить
LLIPAM
Сообщения: 24
Зарегистрирован: 11 фев 2015, 06:55

String-array

Сообщение LLIPAM » 03 мар 2015, 06:26

Здравствуйте!
у меня есть код по созданию бд и его заполнению:

Код: Выделить всё

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

public class DB {
    String[] city={"Москва","Воронеж","Бла"};

    final String LOG_TAG = "myLogs";

    private static final String DB_NAME = "AutoLab";
    private static final int DB_VERSION = 1;
    private static final String DB_TABLE = "city";
    public static final String COLUMN_ID = "_id";
    public static final String COLUMN_TXT = "city";


    private static final String DB_CREATE =
            "create table " + DB_TABLE + "(" +
                    COLUMN_ID + " integer primary key autoincrement, " +
                    COLUMN_TXT + " text" +
                    ");";
    private final Context mCtx;
    private DBHelper mDBHelper;
    private SQLiteDatabase mDB;
    public DB(Context ctx) {
        mCtx = ctx;
    }
    // открыть подключение
    public void open() {
        mDBHelper = new DBHelper(mCtx, 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);
    }

    //выбор одной записи
    public City select(long id) {
        Cursor mCursor = mDB.query(DB_TABLE, null, COLUMN_ID + " = ?", new String[] {String.valueOf(id)}, null, null, COLUMN_TXT);

        mCursor.moveToFirst();
        String city = mCursor.getString(1);
        mCursor.close();
        return new City(id,city);
    }

    // класс по созданию и управлению БД
    private class DBHelper extends SQLiteOpenHelper {
        public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory,
                        int version) {
            super(context, name, factory, version);
        }

        public void onCreate(SQLiteDatabase db) {
            db.execSQL(DB_CREATE);
            ContentValues cv = new ContentValues();
            // заполним таблицу
            for (int i = 0; i < city.length; i++) {
                cv.put(COLUMN_TXT, city[i]);
                db.insert(DB_TABLE, null, cv);
            }
        }
        @Override
        public void onUpgrade (SQLiteDatabase db,int oldVersion, int newVersion){

        }
    }
}
все работает БД создается. Но я подумал почему бы не вынести строку

Код: Выделить всё

String[] city={"Москва","Воронеж","Бла"};
в файл ресурсов? Делаю

Код: Выделить всё

<string-array name="city">
        <item>Иван</item>
        <item>Марья</item>
        <item>Петр</item>
        <item>Антон</item>
        <item>Даша</item>
        <item>Борис</item>
        <item>Костя</item>
        <item>Игорь</item>
        <item>Анна</item>
        <item>Денис</item>
        <item>Вадим</item>
        <item>Ольга</item>
        <item>Сергей</item>
    </string-array>
Встал вопрос о инициализации. Делаю следующее:

Код: Выделить всё

public void onCreate(SQLiteDatabase db) {
            String[] city = getResources().getStringArray(R.array.city);
            db.execSQL(DB_CREATE);
            ContentValues cv = new ContentValues();
            // заполним таблицу
            for (int i = 0; i < city.length; i++) {
                cv.put(COLUMN_TXT, city[i]);
                db.insert(DB_TABLE, null, cv);
            }
        }
Но getResources() выделяется красным и не работает.

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: String-array

Сообщение Mikhail_dev » 03 мар 2015, 10:53

getResources - это метод контекста и его надо вызывать именно у объекта или наследника Context

LLIPAM
Сообщения: 24
Зарегистрирован: 11 фев 2015, 06:55

Re: String-array

Сообщение LLIPAM » 03 мар 2015, 11:40

А как тогда мне инициализировать string-array? что бы его в БД внести?

LLIPAM
Сообщения: 24
Зарегистрирован: 11 фев 2015, 06:55

Re: String-array

Сообщение LLIPAM » 03 мар 2015, 11:52

И еще вопрос тогда можно ли использовать константы одного активити в другом активити. И можно ли константы хранить в файле ресурсов, если да то как их инициализировать. Пробовал следующим образом:
String city = getString(R.string.city);
Не работает.

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: String-array

Сообщение Mikhail_dev » 03 мар 2015, 19:22

У вас в конструкторе DBHelper есть параметр Context. Вот в конструкторе и инициализируйте ваши строки. Сделайте массив массивом класса, а не метода как у вас сейчас, и инициализируйте в конструкторе.
Последний раз редактировалось Mikhail_dev 03 мар 2015, 23:30, всего редактировалось 1 раз.

Аватара пользователя
adarash
Сообщения: 333
Зарегистрирован: 17 июл 2013, 09:59

Re: String-array

Сообщение adarash » 03 мар 2015, 20:56

Mikhail_dev писал(а):У вас в конструкторе DBHelper есть параметр Context. Вот в конструкторе и инициализируйте ваши строки. Сделайте массив массивом класса, а не объекта и инициализируйте в конструкторе.
мне кажется, что он не поймет

Ответить