Erro ao preencher duas tabelas com retorno JSON do Web Service.

237 views
Skip to first unread message

Gabriel Malinosqui

unread,
Jul 30, 2013, 4:29:24 PM7/30/13
to androidb...@googlegroups.com
Pessoal, fiz um WS em php, ele pega os dados de um bd mysql transforma em JSON e manda pro android salvar no banco interno em SQLITE, fiz isso numa boa enquanto estava salvando isso somente em uma tabela, porem preciso pegar dados de duas tabelas e jogar em duas tabelas internas. E esta falando que não existe uma das minhas "ids" no caso a "fk_id"
Para ficar mais claro vou postar os codigos.

Classe WS em PHP
$conexao = mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

onibus();



function onibus(){
$query = "SELECT * FROM onibus";
$query2 = "SELECT * FROM horario_onibus";

$sth = mysql_query($query);
$sth2 = mysql_query($query2);


if (mysql_errno()){
echo mysql_error();
}

else{

$rows = array();
$rows2 = array();

while($r = mysql_fetch_assoc($sth)){
$rows[] = $r;
print json_encode($rows);
while($r = mysql_fetch_assoc($sth2)){

$rows2[] = $r;
print json_encode($rows2);
}
}
}

Classe que esta executando isso no Android.
 
$conexao = mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

onibus();



function onibus(){
$query = "SELECT * FROM onibus";
$query2 = "SELECT * FROM horario_onibus";

$sth = mysql_query($query);
$sth2 = mysql_query($query2);


if (mysql_errno()){
echo mysql_error();
}

else{

$rows = array();
$rows2 = array();

while($r = mysql_fetch_assoc($sth)){
$rows[] = $r;
print json_encode($rows);
while($r = mysql_fetch_assoc($sth2)){

$rows2[] = $r;
print json_encode($rows2);
}
}
}

E o erro na integra: Erro ao inserir dados.org.json.JSONException: No value for fk_id.
Obrigado desde ja, e se não fui claro o suficiente reformulo a pergunta, abraços.

Rudson Lima

unread,
Jul 30, 2013, 4:34:00 PM7/30/13
to androidb...@googlegroups.com
Acredito que o estar acontecendo ai é que em algum momento o horario do onibus estar sendo inserido primeiro do que o onibus
entendendo que exista referencia do onibus na horario de onibus



--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 



--
Atenciosamente,
Rudson Lima

+ Desenvolvedor Delphi - NpInfo
+ Desenvolvedor Android - NpInfo

Gabriel Malinosqui

unread,
Jul 30, 2013, 4:38:03 PM7/30/13
to androidb...@googlegroups.com
Existe referência sim Hudson, a fk_id da tabela horario_onibus é uma chave extrangeira contendo a _id da tabela onibus(deu pra entender? kk).
De qualquer forma, estou criando o banco desse jeito, teria que preencher o horarios primeiro né, separaria em métodos?

private void criaBanco1 (){
try{
bancoDados = openOrCreateDatabase("busao", MODE_WORLD_READABLE, null);
String sql ="CREATE TABLE IF NOT EXISTS onibus "
+"( _id INTEGER PRIMARY KEY, nome_onibus VARCHAR);";
bancoDados.execSQL(sql);
Log.i("TESTE", "BANCO CRIADO");
}
catch (Exception e) {
// TODO: handle exception
Log.i("TESTE", "ERRO AO CRIAR O BANCO"+e);
}
finally{
bancoDados.close();
}
}
 
 
private void criaBanco2(){
try{
bancoDados = openOrCreateDatabase("busao", MODE_WORLD_READABLE, null);
String sql ="CREATE TABLE IF NOT EXISTS horario_onibus "
+"(fk_id INTEGER PRIMARY KEY, horarios VARCHAR, dia VARCHAR, FOREIGN KEY(fk_id) REFERENCES onibus(_id));";
bancoDados.execSQL(sql);
Log.i("TESTE", "BANCO CRIADO2");
}
catch (Exception e) {
// TODO: handle exception
Log.i("TESTE", "ERRO AO CRIAR O BANCO"+e);
}
finally{
bancoDados.close();
}
 
 
}

Obrigado pela resposta e abraços! 

Rudson Lima

unread,
Jul 30, 2013, 4:40:37 PM7/30/13
to androidb...@googlegroups.com
Na verdade os Ônibus teriam que ser inseridos primeiros não? já que o FK estar na horario onibus!


2013/7/30 Gabriel Malinosqui <gabrielm...@gmail.com>

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

Rudson Lima

unread,
Jul 30, 2013, 4:42:45 PM7/30/13
to androidb...@googlegroups.com
vc quer fazer tipo uma sincronização de informações correto?

Ex:

Android ( Botão Sincronizar )

Sincronizando Ônibus ( aguarde )
    Sincronizando Ônibus ( Finalizada )

Sincronizando Horário Ônibus ( aguarde )
    Sincronizando Horário Ônibus ( Finalizada )

É isso..?

Gabriel Malinosqui

unread,
Jul 30, 2013, 4:48:25 PM7/30/13
to androidb...@googlegroups.com
Exatamente isso Rudson!

Rudson Lima

unread,
Jul 30, 2013, 4:52:51 PM7/30/13
to androidb...@googlegroups.com
Imagem em Anexo..

Faz o seguinte...

Criar 2 ASyncTask

1º ASyncTask Onibus e no onPosExecute dela tu verificar se a sincronização foi feita sem erros e chama a ASyncTask do Horario Onibus
Entendeu..?

Eu fiz algo bem parecido com oq vc quer..

Funcionou perfeito...
 




2013/7/30 Gabriel Malinosqui <gabrielm...@gmail.com>
Exatamente isso Rudson!

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 
Screenshot_2013-07-30-17-51-40.png

Gabriel Malinosqui

unread,
Jul 30, 2013, 7:02:07 PM7/30/13
to androidb...@googlegroups.com
Opa saquei, uma Async pra cada? Esses detalhes em azul são progressbar?

Rudson Lima

unread,
Jul 30, 2013, 7:23:00 PM7/30/13
to androidb...@googlegroups.com

Sim... O próximo só inicia depois do término do anterior....

Gabriel Malinosqui

unread,
Jul 30, 2013, 7:35:12 PM7/30/13
to androidb...@googlegroups.com
Ah sim entendi, valeu Rudson, fugindo do topico, mas e só uma pergunta simples, tem isso em HTML5, titanium etc? To pensando em migrar tudo pra esses sdk's , quanto mais plataformas atingir melhor!


--
You received this message because you are subscribed to a topic in the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/androidbrasil-dev/qXBNoO69fWg/unsubscribe.
To unsubscribe from this group and all its topics, send an email to androidbrasil-...@googlegroups.com.

Rudson Lima

unread,
Jul 30, 2013, 7:54:27 PM7/30/13
to androidb...@googlegroups.com

Infelismente não...

Gabriel Augusto

unread,
Jul 30, 2013, 8:10:57 PM7/30/13
to Android Brasil Dev

Rudson,

Tenho certeza exatamente a mesma situação que você. Estou tentando começando a utilizar libs agora, estou are finalizando a PullToRefresh.

As telas que ainda não tem a lib, uso um botão mesmo para sincronizar.  Quando tentei usar, tive problemas com a progress nas tasks.

Na sua opinião, qual a melhor maneira?

--
Via Dispositivo Móvel

Gabriel Malinosqui

unread,
Jul 30, 2013, 8:12:08 PM7/30/13
to androidb...@googlegroups.com
Vish, então o jeito vai ser desenvolver de plataforma por plataforma, começando pelo Android, acho que assim se obtem melhores resultados mesmo.
Obrigado pela respostas, vou implementar o que voce disse e qualquer coisa volto aqui, abraços.
Reply all
Reply to author
Forward
0 new messages