Boa tarde pessoal preciso de uma mãozinha, sou novo com o desenvolvimento android e estou penando um pouco com algumas coisas,
o que eu estou fazendo no momento é desenvolvendo o layout do aplicativo em html5, css e jquery, na classe principal eu criei o banco,
agora preciso fazer o insert dos dados, mas como fazer para que o jquery(javascript) consiga executar o insert no banco sqlite nativo do
android, pq o ideal é que a aplicação tenha seu próprio banco e quando a pessoa fique online ele atualize os dados de ambos os bancos.
Infelizmente todos os exemplos que achei as pessoas estão usando xml, e eu não estou usando xml e sim html.
fico no aguardo de alguma ajuda e caso ache a resposta antes publico aqui pra vcs!
Via código você consegue interceptar chamadas JavaScripts (inclusive receber e retornar valores), procure por addJavascriptInterface da WebView.
Vai resolver seu problema.
No html você faz chamadas a javascripts como banco.adicionar(nome, telefone) e adiciona pelo codigo Java no SQLite provavelmente. Para consumir a mesma coisa, banco.getAllPessoas().
E
ed-cadu
Marky.Vasconcelos vc teria algum exemplo simples desta aplicação?
E então toda chamada javascript em “dao” será redirecionada para o objeto criado.
PS: Necessario adicionar keep names no proguard para manter o Listener com os nomes corretos, pois não irão funcionar após obfuscado (já aconteceu comigo).
E
ed-cadu
no android pelo que pude ver em exemplos esta correto e como o mark me orientou estou usando o addjavascriptinterface
packageExercicio.exercicio1;importandroid.app.Activity;importandroid.content.Context;importandroid.os.Bundle;importandroid.webkit.WebView;importandroid.webkit.WebChromeClient;importandroid.webkit.WebSettings;importandroid.widget.Toast;publicclassMainActivityextendsActivity{WebViewweb;/** Called when the activity is first created. */@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);web=(WebView)findViewById(R.id.webView);WebSettingssettings=web.getSettings();settings.setJavaScriptEnabled(true);settings.setJavaScriptCanOpenWindowsAutomatically(true);settings.setSupportMultipleWindows(true);settings.setSupportZoom(false);settings.setPluginsEnabled(true);web.setWebChromeClient(newWebChromeClient());web.setVerticalScrollBarEnabled(true);web.setHorizontalScrollBarEnabled(false);web.loadUrl("file:///android_asset/www/index.html");web.addJavascriptInterface(newJavaScriptInterface(this),"MainActivity");web.addJavascriptInterface(newJs(),"Android");}publicclassJs{publicStringgetSomeString(){return"Holla mundo!";}}publicclassJavaScriptInterface{ContextmContext;JavaScriptInterface(Contextc){mContext=c;}publicvoidshowToast(Stringtoast){Toast.makeText(mContext,toast,Toast.LENGTH_SHORT).show();}}}
porem ele ainda não me retorna a tal string que estou usando para teste.
alguém ai já fez algo assim ?
Marky.Vasconcelos
Não falta return no seu function?
functionteste(){returnAndroid.getSomeString();
}
E
ed-cadu
coloquei o return mas mesmo assim sem resposta
E
ed-cadu
Mark deu certo, obrigado, é que eu estava testando no chrome tbm e lá não me retorna nada, mas na aplicação no android esta certinho, vlw agora com isso acredito que consiga avançar nos meus estudos aqui… vlw msm pelas dicas!
E
ed-cadu
Ok pessoal desculpe ter começado um novo tópico como entre no fórum muito pouco não sei as regras, ache que a dúvida merecia outro tópico, então minha dúvida é como fazer o insert no banco de dados do android via javascript se puderem dar uma ajuda, ficarei grato.
e desculpe por duplicar o tópico.
Marky.Vasconcelos
Seu método da JavaScript interface não está sendo invocado? Adicione por ele.
E
ed-cadu
olá, no android está assim
packageExercicio.exercicio1;importandroid.app.Activity;importandroid.app.AlertDialog;importandroid.content.Context;importandroid.database.Cursor;importandroid.database.sqlite.SQLiteDatabase;importandroid.os.Bundle;importandroid.webkit.WebView;importandroid.webkit.WebChromeClient;importandroid.webkit.WebSettings;importandroid.widget.Toast;publicclassMainActivityextendsActivity{WebViewweb;/** Called when the activity is first created. */@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);web=(WebView)findViewById(R.id.webView);WebSettingssettings=web.getSettings();settings.setJavaScriptEnabled(true);settings.setJavaScriptCanOpenWindowsAutomatically(true);settings.setSupportMultipleWindows(true);settings.setSupportZoom(false);settings.setPluginsEnabled(true);web.setWebChromeClient(newWebChromeClient());web.setVerticalScrollBarEnabled(true);web.setHorizontalScrollBarEnabled(false);web.loadUrl("file:///android_asset/www/index.html");web.addJavascriptInterface(newJavaScriptInterface(this),"MainActivity");web.addJavascriptInterface(newJs(),"Android");web.addJavascriptInterface(newBancoJS(),"Banco");BancoJSbanco=newBancoJS();banco.CriaDB();}publicclassBancoJS{StringNomeDB="aula";SQLiteDatabaseDB=null;Cursorcursor;publicvoidCriaDB(){try{DB=openOrCreateDatabase(NomeDB,MODE_WORLD_READABLE,null);StringSQL="CREATE TABLE IF NOT EXISTS tabPessoa (_id INTEGER PRIMARY KEY AUTOINCREMENT, nome_pessoa TEXT NOT NULL, telefone_pessoa TEXT NOT NULL)";DB.execSQL(SQL);MensagemAlerta("Banco de dados","Banco Criado Com Sucesso!");}catch(Exceptionerro){MensagemAlerta("Erro Banco de dados","Não foi possível cria o banco!"+erro);}finally{DB.close();}}publicvoidinsertDB(Stringnome,Stringtelefone){try{DB=openOrCreateDatabase(NomeDB,MODE_WORLD_READABLE,null);StringSQL="INSERT INTO tabCadastroPessoa(nome_pessoa, telefone_pessoa) VALUES ('"+nome.toString()+","+telefone.toString()+"')";DB.execSQL(SQL);MensagemAlerta("Banco de dados","Registro Gravado Com Sucesso!");}catch(Exceptionerro){MensagemAlerta("Erro Banco de dados","Não foi possível gravar o registro!"+erro);}finally{DB.close();}}publicvoidMensagemAlerta(StringTituloAlerta,StringMensagemAlerta){AlertDialog.BuilderMensagem=newAlertDialog.Builder(MainActivity.this);Mensagem.setTitle(TituloAlerta);Mensagem.setMessage(MensagemAlerta);Mensagem.setNeutralButton("OK",null);Mensagem.show();}}publicclassJs{publicStringgetSomeString(){return"Holla mundo!";}}publicclassJavaScriptInterface{ContextmContext;JavaScriptInterface(Contextc){mContext=c;}publicvoidshowToast(Stringtoast){Toast.makeText(mContext,toast,Toast.LENGTH_SHORT).show();}}}
E q não esta passando o valor pelo javascript(jquery). eu dei um alert pra saber se esta recuperando o valor dos inputs e até ai blz esta ocorrendo certinho, mas na hora de enviar ao java para fazer o insert no banco do android não esta indo, e tenho certeza que estou fazendo algo errado e precisava de uma mãozinha se possível.
packageExercicio.exercicio1;importandroid.app.Activity;importandroid.app.AlertDialog;importandroid.content.Context;importandroid.database.Cursor;importandroid.database.sqlite.SQLiteDatabase;importandroid.os.Bundle;importandroid.webkit.WebView;importandroid.webkit.WebChromeClient;importandroid.webkit.WebSettings;importandroid.widget.Toast;publicclassMainActivityextendsActivity{WebViewweb;/** Called when the activity is first created. */@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);web=(WebView)findViewById(R.id.webView);WebSettingssettings=web.getSettings();settings.setJavaScriptEnabled(true);settings.setJavaScriptCanOpenWindowsAutomatically(true);settings.setSupportMultipleWindows(true);settings.setSupportZoom(false);settings.setPluginsEnabled(true);web.setWebChromeClient(newWebChromeClient());web.setVerticalScrollBarEnabled(true);web.setHorizontalScrollBarEnabled(false);web.loadUrl("file:///android_asset/www/index.html");web.addJavascriptInterface(newJavaScriptInterface(this),"MainActivity");web.addJavascriptInterface(newJs(),"Android");web.addJavascriptInterface(newBancoJS(),"Banco");BancoJSbanco=newBancoJS();banco.CriaDB();}publicclassBancoJS{StringNomeDB="aula";SQLiteDatabaseDB=null;Cursorcursor;publicvoidCriaDB(){try{DB=openOrCreateDatabase(NomeDB,MODE_WORLD_READABLE,null);StringSQL="CREATE TABLE IF NOT EXISTS tabPessoa (_id INTEGER PRIMARY KEY AUTOINCREMENT, nome_pessoa TEXT NOT NULL, telefone_pessoa TEXT NOT NULL)";DB.execSQL(SQL);MensagemAlerta("Banco de dados","Banco Criado Com Sucesso!");}catch(Exceptionerro){MensagemAlerta("Erro Banco de dados","Não foi possível cria o banco!"+erro);}finally{DB.close();}}publicvoidinsertDB(Stringnome,Stringtelefone){try{DB=openOrCreateDatabase(NomeDB,MODE_WORLD_READABLE,null);StringSQL="INSERT INTO tabPessoa(nome_pessoa, telefone_pessoa) VALUES ('"+nome.toString()+"','"+telefone.toString()+"')";DB.execSQL(SQL);MensagemAlerta("Banco de dados","Registro Gravado Com Sucesso!");}catch(Exceptionerro){MensagemAlerta("Erro Banco de dados","Não foi possível gravar o registro!"+erro);}finally{DB.close();}}publicvoidMensagemAlerta(StringTituloAlerta,StringMensagemAlerta){AlertDialog.BuilderMensagem=newAlertDialog.Builder(MainActivity.this);Mensagem.setTitle(TituloAlerta);Mensagem.setMessage(MensagemAlerta);Mensagem.setNeutralButton("OK",null);Mensagem.show();}}publicclassJs{publicStringgetSomeString(){return"Holla mundo!";}}publicclassJavaScriptInterface{ContextmContext;JavaScriptInterface(Contextc){mContext=c;}publicvoidshowToast(Stringtoast){Toast.makeText(mContext,toast,Toast.LENGTH_SHORT).show();}}}
Marky.Vasconcelos
E?
Funcionou?
E
ed-cadu
sim agora funcionou, to pegando o jeito de programar em android aos poucos, é que os exemplos que eu achei pela net em sua maioria são todos usando xml então acaba mudando a maneira de se fazer as coisas pelo menos um pouco, mas deu certo sim, agora é criar uma lista com os contatos que estão no banco.
e mais uma vez vlw as dicas marky!!
Marky.Vasconcelos
Que bom.
Edite o primeiro topico e adicione [RESOLVIDO] ao titulo para identificar essa questão como resolvida.