Страница 1 из 1

WebView + java + SQLite

Добавлено: 20 апр 2012, 13:10
laandrew
Здравствуйте!

Прошу помощи в коде по следующему вопросу:

Есть база SQLite. Там две таблицы. Таблица: Страна и таблица: Города

Я получаю путем запроса данные из таблицы Страна (страна это ссылка), формирую html с названиями стран и путем webView.loadData загружаю на экран. При нажатии на Страну, я должен получить данные (какая страна) и в зависимости от страны сделать запрос ко второй таблице (Города) и получить данные. Потом сформировать на основании городов html и опять загрузить на экран.

Как сделать это не могу понять. Прошу помощи в написании кода.

Re: WebView + java + SQLite

Добавлено: 20 апр 2012, 21:48
KamiSempai
Пока я искал как можно избавиться от проблем с прозрачным WebView, наткнулся на описание использования JavascriptInterface.
Принцип его работы примерно следующий:
Описывается класс с public методами. WebView добавляется JavascriptInterface с помощью метода addJavascriptInterface, где в качестве одного из параметров выступает объект того самого класса, который мы описали. Теперь Java скриптам стали доступны все public методы из описанного класса.

Можно на нажатие по стране, назначить скрипт по вызову метода который заставить WebView отправить запрос на нужную страницу.
Вот ссылка на статью по его использованию: Статья по использованию JavascriptInterface
Она на английском, но там и без перевода все понятно.

PS: Кстати, там используется Handler. Может как раз это имел в виду тот человек, который тоже мучился с прозрачностью WebView?

Re: WebView + java + SQLite

Добавлено: 21 апр 2012, 22:38
laandrew
Я ознакомился со статьей. Но есть вопросы.

Вот код часть кода, взятый со статьи:
final class MyJavaScriptInterface {
MyJavaScriptInterface() {
}
public String add(final String name) {
final String msg = null;
handler.post(new Runnable() {
public void run() {
//addOrRemove(name, true);
msg = "Andrew Ivanoff"+name;
Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_LONG).show();
}
});
return msg;
}
}

Мне нужно обратно вернуть msg, но eclipse дает ошибку на строку: msg = "Andrew Ivanoff"+name;

Подскажите, пожалуйста, где в коде кроется ошибка. Иначе я не смогу воспользоваться handler.

Re: WebView + java + SQLite

Добавлено: 22 апр 2012, 19:00
KamiSempai
По тому, что msg был объявлен как final и ему уже было присвоено значение: "final String msg = null;"

Re: WebView + java + SQLite

Добавлено: 25 апр 2012, 23:17
laandrew
Убрал final.

Теперь ругается (Ошибка: Cannot refer to a non-final variable msg inside an inner class defined in a different method) на строки:
msg = "Andrew Ivanoff"+name;
Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_LONG).show();

Рекомендует поставить final обратно.

Что делать?

Re: WebView + java + SQLite

Добавлено: 26 апр 2012, 07:36
KamiSempai
Думаю, стоит избавиться от Runnable и делать все действия в функции.
Кстати, Вы учитываете, что эта функция будет вызываться в скрипте и значение будет возвращать тоже в скрипт?

Я тут подумал, а не проще ли сразу выдавать страницу с ссылками на нужные страницы?

Re: WebView + java + SQLite

Добавлено: 26 апр 2012, 14:04
laandrew
KamiSempai писал(а): Кстати, Вы учитываете, что эта функция будет вызываться в скрипте и значение будет возвращать тоже в скрипт?
Да, учитываю, но у меня это не получается сделать.
KamiSempai писал(а): Я тут подумал, а не проще ли сразу выдавать страницу с ссылками на нужные страницы?
Я сейчас так делаю, но предыдущая страница остается на экране. Когда в css указываю для <body> margin 0;, то все OK. Стоит изменить на другое значение не равное 0, сразу на экране идет "залипание" предыдущего запроса. Почему так происходит не могу найти.