Страница 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-
Да просто уже на себя зла не хватает и нервов из-за непонимания, как мне кажется, элементарных вещей, вот руки и опускаются.
Самое интересное, что если работать без базы данных, а задавать данные в массиве, то все получается, все работает как надо. То есть при нажатии кнопки выводятся новые данные на экран и сердце радуется :)
А вот с базой данных полная беда.
вот полный текст того, что я написал:

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

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- писал(а):Ладно, спасибо всем, кто откликнулся.
Понимаю, что зря начал учить программирование. Думаю, что это не моё. Не заточены мозги у меня под это дело.
Ты не представляешь сколько раз, когда я только за андроид взялась, у меня было ситуаций, когда я думала "это сделать невозможно", вот буквально страшно становилось, т.к. проект был коммерческий изначально. А потом находился выход.
Выход есть всегда, нужно просто не отчаиваться, а искать его, именно тот, правильный - в своем пространстве вариантов :)
Тут уже были такие, которые спотыкались на базах ;)

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";

Можете подсказать, какой существует оператор, который мне помог бы в этом вопросе.

Заранее благодарен!