Как передать ResultSet в onItemClick

SQLite, Preferences, файлы, SD, Content Provider, XML, JSON
Закрыто
sanya5791
Сообщения: 20
Зарегистрирован: 10 окт 2014, 15:22
Откуда: Днепропетровск

Как передать ResultSet в onItemClick

Сообщение sanya5791 » 10 окт 2014, 15:48

Здравствуйте.
Хочу в одном методе объявить локальный курсор ResultSet rs и передать его в обработчик нажатия ListView.

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

........
	private void launchCallableStatement(String statementName) {
		Fragment frag2;									//объявим фрагмент
		CallableStatement stmt;							//вызываемая процедура БД
		ResultSet rs;

		ListView lv;
.....
		rs = stmt.executeQuery();
		// находим список фо фрагменте
		lv = (ListView) frag2.getView().findViewById(R.id.lv_out1);

		/*** Обработаем нажатие на список ListView ***/
		lv.setOnItemClickListener(new OnItemClickListener() {
			@Override
			public void onItemClick(AdapterView<?> parent, View arg1,
				int position, long arg3) {
				MyLogger("The item N" + position + " is selected" +
								"\nIt's name" + parent.getAdapter().getItem(position));
				try {
					rs.absolute(position+1);

						} catch (SQLException e) {
							// TODO Auto-generated catch block
							MyLogger("SQLException" + e);
							e.printStackTrace();
						}
					}
				});
......
Внутри блока try, rs.absolute(position+1); не видно ранее объявленного курсора. Понимаю, что @Override, значит вызвать метод из другого класса. Но все-таки, как можно туда передать курсор
Хочу использовать именно локальный курсор - если объявить глобально, то все работает. БОльшое спасибо.

Аватара пользователя
Leeroy
Сообщения: 67
Зарегистрирован: 12 дек 2013, 21:25

Re: Как передать ResultSet в onItemClick

Сообщение Leeroy » 10 окт 2014, 17:02

final ResultSet rs
и/или в public void onItemClick, добавь ещё одну локальную переменную ссылающуюся на курсор
Java Core -> JDBC -> GoF -> Android SDK ->...
Телепрограмма в твоем смарте Телепрограмма

sanya5791
Сообщения: 20
Зарегистрирован: 10 окт 2014, 15:22
Откуда: Днепропетровск

Re: Как передать ResultSet в onItemClick

Сообщение sanya5791 » 12 окт 2014, 18:07

Спасибо, с final все понятно. А как же передать без объявления final?
Вы написали:
Leeroy писал(а):final ResultSet rs
и/или в public void onItemClick, добавь ещё одну локальную переменную ссылающуюся на курсор
Как раз интересен вариант "или в public void onItemClick, добавь ещё одну локальную переменную ссылающуюся на курсор". Подробнее пожалуйста :-).

Аватара пользователя
Leeroy
Сообщения: 67
Зарегистрирован: 12 дек 2013, 21:25

Re: Как передать ResultSet в onItemClick

Сообщение Leeroy » 12 окт 2014, 20:26

попробуй в объявлении класса реализовать implements OnItemClickListener {

В классе объяви переменную класса курсор.
и в @Override public void onItemClick(AdapterView<?> parent, View arg1,
int position, long arg3)
обращайся к ней
Java Core -> JDBC -> GoF -> Android SDK ->...
Телепрограмма в твоем смарте Телепрограмма

sanya5791
Сообщения: 20
Зарегистрирован: 10 окт 2014, 15:22
Откуда: Днепропетровск

Re: Как передать ResultSet в onItemClick

Сообщение sanya5791 » 14 окт 2014, 16:01

Ув. Leeroy. Вы писали:
Leeroy писал(а): В классе объяви переменную класса курсор.
Но я как раз хотел бы избежать объявления курсора на уровне класса, ограничившись лишь объявлением курсора внутри метода launchCallableStatement(String). Может я неправильно понял,... тогда можно подробнее?

ihitmani
Сообщения: 8
Зарегистрирован: 26 ноя 2014, 01:04

Re: Как передать ResultSet в onItemClick

Сообщение ihitmani » 26 ноя 2014, 11:22

sanya5791 писал(а):Здравствуйте.
Хочу в одном методе объявить локальный курсор ResultSet rs и передать его в обработчик нажатия ListView.

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

........
	private void launchCallableStatement(String statementName) {
		Fragment frag2;									//объявим фрагмент
		CallableStatement stmt;							//вызываемая процедура БД
		ResultSet rs;

		ListView lv;
.....
		rs = stmt.executeQuery();
		// находим список фо фрагменте
		lv = (ListView) frag2.getView().findViewById(R.id.lv_out1);

		/*** Обработаем нажатие на список ListView ***/
		lv.setOnItemClickListener(new OnItemClickListener() {
			@Override
			public void onItemClick(AdapterView<?> parent, View arg1,
				int position, long arg3) {
				MyLogger("The item N" + position + " is selected" +
								"\nIt's name" + parent.getAdapter().getItem(position));
				try {
					rs.absolute(position+1);

						} catch (SQLException e) {
							// TODO Auto-generated catch block
							MyLogger("SQLException" + e);
							e.printStackTrace();
						}
					}
				});
......
Внутри блока try, rs.absolute(position+1); не видно ранее объявленного курсора. Понимаю, что @Override, значит вызвать метод из другого класса. Но все-таки, как можно туда передать курсор
Хочу использовать именно локальный курсор - если объявить глобально, то все работает. БОльшое спасибо.

А не пробовал https://developer.android.com/reference ... .Object%29, найти ту вьюху зараньше зесетить туда курсор а потом вытащить?

sanya5791
Сообщения: 20
Зарегистрирован: 10 окт 2014, 15:22
Откуда: Днепропетровск

Re: Как передать ResultSet в onItemClick

Сообщение sanya5791 » 27 ноя 2014, 12:46

Всем спасибо за ответы. Для себя решение нашел следующее:
Т.к. resultSet принимает результат запроса к БД, то сам запрос можно выполнять только в отдельном потоке. А значит, нет доступа к основному (UI) потоку.
Следовательно, создал отдельный класс для осуществления запроса и здесь же на уровне класса объявил ResultSet mRs. А потом, через getter - ResultSet getRs() получаю его там, где мне нужно.

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

public class GetZonesTask extends AsyncTask<String, String, Boolean> {

//.......... объявляю другие переменные
	private ResultSet mRs;

//.............. выполняю запрос к БД и получаю ответ в ResultSet mRs

	public ResultSet getRs() {
		return mRs;
	}
}
Т.е. вкраце: все-таки объявил ResultSet переменной на уровне класса, а не локально, внутри метода.

Еще раз спасибо за Ваши ответы.

Закрыто