Страница 5 из 11
Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор
Добавлено: 28 ноя 2013, 17:00
KamiSempai
Объясните, что делается в этой строке:
String s = (String) result.get(rand.nextInt(engColIndex));
Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор
Добавлено: 29 ноя 2013, 10:53
-Alex-
KamiSempai писал(а):Объясните, что делается в этой строке:
String s = (String) result.get(rand.nextInt(engColIndex));
В этой строке я для s выбираю из заполненного массива result случайное значение.
В результате мне выдается null, хотя Log.d(LOG_TAG, "result = " + result) показывает, что данные существуют.
Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор
Добавлено: 29 ноя 2013, 11:43
WizikTLT
Может быть проблема в
String s = (String) result.get(rand.nextInt(engColIndex));
у тебя ключ в Map result является String
а тут ты пытаешься искать по типу Int т.к rand.nextInt(engColIndex) возвращает Int.
Попробуй обернуть это все в result.get(String.valueof(rand.nextInt(engColIndex)))
Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор
Добавлено: 29 ноя 2013, 13:37
-Alex-
Не помогло. Думается мне, что я совсем не то делаю.
Может подскажете какой-нибудь другой способ засунуть данные из ДБ в массив и потом считать 1 рандомное значение из массива при нажатии кнопки.
Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор
Добавлено: 29 ноя 2013, 14:24
KamiSempai
Не проще переводить позицию на случайную строку и читать данные прямо из курсора без переписывания в "массив"?
Кстати, я понял в чем ваша проблема. Вы думаете что HashMap - это массив, но это не совсем так.
Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор
Добавлено: 29 ноя 2013, 14:37
WizikTLT
Хотелось бы увидеть
в каком виде ключи приходят вот тут -
result.put(c.getString(engColIndex), c.getString(rusColIndex));
----> c.getString(engColIndex)
и что приходит вот тут, когда ты делаешь result.get(rand.nextInt(engColIndex)); -
----> rand.nextInt(engColIndex)
Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор
Добавлено: 29 ноя 2013, 15:05
-Alex-
Ладно, спасибо всем, кто откликнулся.
Понимаю, что зря начал учить программирование. Думаю, что это не моё. Не заточены мозги у меня под это дело.
Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор
Добавлено: 29 ноя 2013, 15:13
WizikTLT
Рано сдаешься =)
Давай добьем эту проблему, а дальше решишь.
Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор
Добавлено: 29 ноя 2013, 15:23
-Alex-
Да просто уже на себя зла не хватает и нервов из-за непонимания, как мне кажется, элементарных вещей, вот руки и опускаются.
Самое интересное, что если работать без базы данных, а задавать данные в массиве, то все получается, все работает как надо. То есть при нажатии кнопки выводятся новые данные на экран и сердце радуется
![Улыбается :)](./images/smilies/icon_e_smile.gif)
А вот с базой данных полная беда.
вот полный текст того, что я написал:
Код: Выделить всё
public class MainActivity extends Activity implements OnClickListener {
Button btnMainFwd;
TextView tvMainWord;
TextView tvRusWord;
DbHelper dbHelper;
final String LOG_TAG = "myLogs";
String[] masEngName = new String[] {};
String[] masRusName = new String[] {};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
if (getIntent().getBooleanExtra("finish", false))
finish();
btnMainFwd = (Button) findViewById(R.id.btnMainFwd);
btnMainFwd.setOnClickListener(this);
dbHelper = new DbHelper(this);
}
@Override
public void onClick(View v) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
Cursor c = db.query("mytable", null, null, null, null, null, null);
switch (v.getId()) {
case R.id.btnMainFwd:
Log.d(LOG_TAG, "=== Читаем одну запись ===");
int idColIndex = c.getColumnIndex("id");
int engColIndex = c.getColumnIndex("engWord");
int rusColIndex = c.getColumnIndex("rusWord");
Map result = new HashMap<String, String>();
if (c.moveToFirst()) {
do {
result.put(c.getString(engColIndex), c.getString(rusColIndex));
Log.d(LOG_TAG, "result = " + result);
} while (c.moveToNext());
Random rand = new Random();
for (int i = 0; i < 1; i++) {
String s = (String) result.get(rand.nextInt(engColIndex));
Log.d(LOG_TAG, "s = " + s);
}
} else
Log.d(LOG_TAG, "0 rows");
c.close();
break;
}
}
class DbHelper extends SQLiteOpenHelper {
public DbHelper(Context context) {
super(context, "DBWords", null, 1);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
Log.d(LOG_TAG, "===Создаем новую ДБ===");
db.execSQL("create table mytable ("
+ "id integer primary key autoincrement," + "engWord text,"
+ "rusWord text, " + "indLearn text" + ");");
}
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
// TODO Auto-generated method stub
}
}
}
Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор
Добавлено: 29 ноя 2013, 15:49
WizikTLT
Я тебе в личку скинул. Если что пиши туда
Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор
Добавлено: 29 ноя 2013, 18:27
Foenix
-Alex- писал(а):Ладно, спасибо всем, кто откликнулся.
Понимаю, что зря начал учить программирование. Думаю, что это не моё. Не заточены мозги у меня под это дело.
Ты не представляешь сколько раз, когда я только за андроид взялась, у меня было ситуаций, когда я думала "это сделать невозможно", вот буквально страшно становилось, т.к. проект был коммерческий изначально. А потом находился выход.
Выход есть всегда, нужно просто не отчаиваться, а искать его, именно тот, правильный - в своем пространстве вариантов
![Улыбается :)](./images/smilies/icon_e_smile.gif)
Тут уже были такие, которые спотыкались на базах
![Подмигивает ;)](./images/smilies/icon_e_wink.gif)
Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор
Добавлено: 03 дек 2013, 20:27
ragvarod
Подскажите пожалуйста, каким образом сделать так, что бы результат запроса выводился в окне приложения?
Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор
Добавлено: 03 дек 2013, 21:25
Foenix
Уроки почитать. И где вы в андроиде видели окна?
Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор
Добавлено: 08 дек 2013, 20:26
ragvarod
Прошу прощения, не так выразился! Мне нужно результат запроса к БД вывести на экран к пользователю, как это лучше сделать? Как я сам понимаю, нужно работать с Spinner?
Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор
Добавлено: 08 дек 2013, 21:49
Foenix
ого, это ж в уроках написано. Какой спиннер??
Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор
Добавлено: 08 дек 2013, 21:54
ragvarod
Foenix писал(а):ого, это ж в уроках написано. Какой спиннер??
если не трудно можете дать ссылку на урок? спинер - выпадающий список..
Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор
Добавлено: 10 дек 2013, 11:59
-Alex-
ragvarod писал(а):Foenix писал(а):ого, это ж в уроках написано. Какой спиннер??
если не трудно можете дать ссылку на урок? спинер - выпадающий список..
думаю, что Вам надо не Spinner, а "Урок 42. Список - ListView".
ListView сможет отобразить на экране список данных из БД.
Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор
Добавлено: 10 дек 2013, 13:28
-Alex-
Уважаемые гуру, подскажите пожалуйста следующий момент.
Какое условие необходимо задать в массиве, чтобы выбиралось определенное количество записей из него, например 10 записей?
Вот здесь создаю массив из данных БД:
Код: Выделить всё
if (c.moveToFirst()) {
do {
row = new DbRows(c.getInt(idColIndex), c.getString(engColIndex), c.getString(rusColIndex));
result.add(row);
} while (c.moveToNext());
Log.d(LOG_TAG, "количество записей = " + c.getCount());}
А как необходимо организовать следующий массив, в котором будет отбираться первые 10 записей из массива row?
Заранее благодарю за ответы!
Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор
Добавлено: 10 дек 2013, 16:04
Foenix
отбирать нужное количество записей нужно прямо в запросе, а не манипулировать массивами
Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор
Добавлено: 10 дек 2013, 16:18
-Alex-
Foenix писал(а):отбирать нужное количество записей нужно прямо в запросе, а не манипулировать массивами
а не могли бы вы подсказать, какой параметр в запросе отвечает за выбираемое количество записей?
например, если для курсора я прописываю значение:
selection = "_id < 10";
то выбираются записи, у которых _id < 10, но это не то.
Мне надо бы какой-нибудь оператор, типа:
selection = "_id count == 10";
Можете подсказать, какой существует оператор, который мне помог бы в этом вопросе.
Заранее благодарен!