>

Fórum

Fórum da RL System, voltado para analistas, programadores etc. Tudo sobre linguagem de programação e desenvolvimento Full Stack: Banco de Dados, Android, C#, Java, .NET, PHP, Node, Javascript, TypeScript, Front, HTML e muito mais.



Importação de Dados no Android com php


Boa noite.

Utilizei em meu projeto o seguinte código php para importar dados do MySql em meu aplicativo de vendas android.


$conn = mysql_connect("172.16.1.2", "root", "01011979");
$db = mysql_select_db("dbmbd");
$sth = mysql_query("SELECT * FROM produto");

$rows = array();

while($r = mysql_fetch_assoc($sth)) {
$rows[] = $r;
}

print json_encode($rows);

?>

Estava tudo funcionando corretamente, quando este mesmo código simplesmente parou de funcionar, não trazendo no browser o resultado grado em json. Acredito que possa ser algum problema de configuração talvez.

Alguem poderia me ajudar?

Att.



8 Respostas


Ola Francesco,

seu ip é fixo???




sim, ip fixo, mas mesmo colocando o nome da máquina onde esta o servidor mysql dá o mesmo problema.

que configurações eu poderia checar?

O código completo da classe service esta abaixo, esta dando problema na seguinte linha na depuração: JSONArray array = new JSONArray(linhaRetorno); acredito que o resultado do script php não esteja vindo no formato de array, mesmo porque, executando no browser o resultado é vazio, o que não ocorria antes, pois estava funcionando corretamente. Me parece que: print json_encode($rows); não imprime nada, movendo esta linha para dentro do while(r$ = mysql_fetch_assoc($sth)) { print json_encode($r); }, imprimindo direto o r$, o resultado é impresso por linha corretamente, só que por não estar em formato de array no código android continua não funcionando.

package br.dbm.ve;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

import org.json.JSONArray;
import org.json.JSONObject;

import android.app.Service;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.IBinder;
import android.util.Log;

public class AtualizarPrecosService extends Service implements Runnable {

public void onCreate(){
new Thread(AtualizarPrecosService.this).start();
}

@Override
public void run() {
SQLiteDatabase db = openOrCreateDatabase("vendasdbm.db",
Context.MODE_PRIVATE, null);

db.delete("produtos", "codigo>?", new String[]{String.valueOf(0)});
Log.d("ImportarRegistros", "Limpeza do banco de dados.");

ContentValues ctv = new ContentValues();

StringBuilder strUrl = new StringBuilder();
strUrl.append("http://172.16.1.2/selectdbm.php");

try{
URL url = new URL(strUrl.toString());
HttpURLConnection http = (HttpURLConnection) url.openConnection();
InputStreamReader ips = new InputStreamReader(http.getInputStream());
BufferedReader line = new BufferedReader(ips);

String linhaRetorno = line.readLine();
JSONArray array = new JSONArray(linhaRetorno); (*** na depuração o erro ocorre aqui ***)

String codigo; String descricao; String fx1; String fx2; String fx3;
String codBarras;

if (linhaRetorno != ""){
for(int j = 0; j < array.length(); j) {
JSONObject objeto = array.getJSONObject(j);

codigo = objeto.getString("idProduto");
descricao = objeto.getString("nmProduto");
fx1 = objeto.getString("Fx1");
fx2 = objeto.getString("Fx2");
fx3 = objeto.getString("Fx3");
codBarras = objeto.getString("nrCodBarra");

ctv.put("codigo", codigo);
ctv.put("nome", descricao);
ctv.put("precoCheio", fx1);
ctv.put("precoDif", fx2);
ctv.put("precoX", fx3);
ctv.put("codbarras", codBarras);

db.insert("produtos", "", ctv);
ctv.clear();

Log.d("ImportarRegistros",
String.valueOf(codigo.concat(" ").concat(descricao)).concat(" ").concat(String.valueOf(fx1))
);
}
}else{
Log.d("ImportarRegistros", "ResultSet vazio.");
}

if (linhaRetorno != ""){
line.close();
Log.d("ImportarRegistros", "ResultSet limpeza.");
}

}catch(Exception ex){
Log.d("ImportarRegistros", ex.getMessage());
}
}

@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}

}

Fico no aguardo,

Att.




Ola Francesco...

O problema não é seu código...

Uma vez eu quis acessar de um outro canto fora do alcance d meu roteador... E naum pegou ... Qdo eu tava perto d meu roteador pegava... Naum sei se é esse teu problema




Ola André, bom dia.

Aqui esta tudo próximo ao roteador, não seria problema de distancia.

Mas rodando na própria maquina como localhost o resultado em JSON também não retorna.

Cara foi incrível, antes do almoço estava tudo funcionando, fechei a tampa do note e quando voltei não estava mais funcionando.

Estou achando que deva ser algum problema de configuração no retorno do JSON, achei estas codificações possíveis, testei apenas a UNICODE, não sei se tem algo a ver com o problema.

$a = array('',"'bar'",'"baz"','&blong&', "\xc3\xa9");

echo "Normal: ", json_encode($a), "\n";
echo "Tags: ", json_encode($a, JSON_HEX_TAG), "\n";
echo "Apos: ", json_encode($a, JSON_HEX_APOS), "\n";
echo "Quot: ", json_encode($a, JSON_HEX_QUOT), "\n";
echo "Amp: ", json_encode($a, JSON_HEX_AMP), "\n";
echo "Unicode: ", json_encode($a, JSON_UNESCAPED_UNICODE), "\n";
echo "All: ", json_encode($a, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE), "\n\n";

Gostaria de resolver o problema do php, mas estou pensando numa alternativa, neste caso eu precisaria implementar uma classe de conexão direta com MySql, seria muito complicado?

Att.




André, me ocorreu também de obter um retorno em objeto JSON, ao invés de array (nesta parte: JSONArray array = new JSONArray(linhaRetorno);), e fazer um loop para gravar os produtos, devido o erro na depuração ser de conversão de object to array.

Será que daria certo assim?

Att.




Bem, o máximo que consegui com o php até agora foi o resultado abaixo, linha por linha impressa:

{"idProduto":"363","nmProduto":"COCA COLA LATA UND","dsUnidade":"UN"}{"idProduto":"377","nmProduto":"COCA COLA 600ML UND","dsUnidade":"UN"}{"idProduto":"435","nmProduto":"AGUARDENTE 51 UND","dsUnidade":"UN"}{"idProduto":"455","nmProduto":"CONHAQUE DOMECQ","dsUnidade":"UN"}{"idProduto":"478","nmProduto":"CAMPARI BITER UN","dsUnidade":"UN"}{"idProduto":"759","nmProduto":"AGUA 1,5L GELADA","dsUnidade":"UN"}{"idProduto":"838","nmProduto":"GUARANITA TOBI 600 ML","dsUnidade":"UN"}{"idProduto":"1176","nmProduto":"DEL VALLE CAJU 1L UN","dsUnidade":"UN"}{"idProduto":"1191","nmProduto":"CERVEJA PETRA 600 ML C\/24","dsUnidade":"CX"}resultado

A partir do seguinte código:

try{
$conn = mysql_connect("172.16.1.2", "root", "01011979");
$db = mysql_select_db("dbmbd");
$consulta = mysql_query("SELECT idProduto, nrCodBarra, nmProduto, dsUnidade FROM produto");
//echo "Result: " . $consulta;
if(mysql_num_rows($consulta) > 0){
$retorno = array();
$i = 0;
while($dados = mysql_fetch_array($consulta)){
$retorno[$i]["idProduto"] = $dados["idProduto"];
$retorno[$i]["nmProduto"] = $dados["nmProduto"];
$retorno[$i]["dsUnidade"] = $dados["dsUnidade"];
print json_encode($retorno[$i]);
$i ;
}
$teste= json_encode($retorno);
//echo "";
print "resultado" . $teste;
}else{
echo "Nenhum valor encontardo";
}
return $retorno;
} catch (PDOException $ex) {
echo "Erro: " . $ex->getMessage();
}
?>

Pelo que vejo o print json_encode($retorno[$i]) só funciona dentro do while, fora, parece que o valor se torna vazio e nada é impresso na tela.

Att.




Tente colocar

no lugar de print

print_r




Olá Andre,