|
Página 1 de 1
|
[ 3 Mensagens ] |
|
Android Ksoap2 consumindo webservice PHP
| Autor |
Mensagem |
|
Juliana Toldo
What is Android?
Data de registro: 04 Out 2012, 23:35 Mensagens: 1
|
 Android Ksoap2 consumindo webservice PHP
Boa noite,
Estou programando um aplicativo Android, no qual tenho uma tela de login basica, que deve se comunicar com um webservice em PHP (banco de dados Mysql) e retornar 1 (Login com sucesso) ou 0 (Aluno não encontrado).
* Arquivos para o Webservice:
Para isso fiz um arquivo classe XML (Xml.Class.php) que irá formatar o resultado da consulta feita no webservice e retornará um arquivo em formato XML.
<?php class Xml{ //atributos private $xml; private $tab = 1; //metodos public function __construct($version = '1.0', $encode = 'ISO-8859-1') { $this->xml .= "<?xml version='$version' encoding='$encode' ?>\n"; } public function openTag($name){ $this->addTab(); $this->xml .= "<$name>\n"; $this->tab++; } public function closeTag($name){ $this->tab--; $this->addTab(); $this->xml .= "</$name>\n"; } public function setValue($value){ $this->xml .= "$value\n"; } private function addTab(){ for ($i = 1; $i <= $this->tab; $i++){ $this->xml .= "\t"; } } public function addTag($name, $value){ $this->addTab(); $this->xml .= "<$name>$value</$name>\n"; } public function __toString(){ return $this->xml; } } ?>
O arquivo conexao.php, é a configuracao para conexao ao banco de dados.
<?php
function abrir_conexao() { $conexao= mysql_connect("localhost", "", "") or die("a conexão com o servidor mysql não foi possível.erro:".mysql_error()); $bd= mysql_select_db("BANCO",$conexao) or die("Não foi possível selecionar o db testfatec.erro: ".mysql_error()); }
?>
O arquivo index2.php é meu webservice, que ao receber o ra e a senha do usuario, faz a consulta no banco de dados e nos traz o resultado em formato xml.
<?php include_once("conexao.php"); include_once("Xml.Class.php");
error_reporting(0);
$server = new SoapServer(null, array("uri" => "http://localhost/app/soap", "encoding" => "ISO-8859-1"));
function teste() { return ("Ok"); }
function consultar($ra, $password) { $xml = new Xml();
$erro = 0;
$msgerro = '';
$xml->openTag("response");
if($ra == ''){ $xml->addTag('erro', 0); $msg = 'RA não preenchido'; $xml->addTag('msg', $msg); } else{ abrir_conexao(); $sql = "SELECT NO BANCO DE DADOS"; $resultado = mysql_query($sql); if(mysql_num_rows($resultado) > 0){ $reg = mysql_fetch_object($resultado); $xml->addTag('erro', 1); $msg = 'Login com sucesso'; $xml->addTag('msg', $msg); } else{ $erro = 0; $xml->addTag('erro', $erro); $msg = 'Aluno não encontrado!'; $xml->addTag('msg', $msg); } }
$xml->closeTag("response");
//echo $xml; //exibe todo conteudo da variavel xml mysql_free_result($resultado); return ($xml); }
$servidor->addFunction("teste"); $servidor->addFunction("consultar");
if ($_SERVER["REQUEST_METHOD"] == "POST") { $servidor->handle(); } else { $funcoes = $servidor->getFunctions(); echo "<h2>Métodos publicados:</h2>"; echo "<ul>"; foreach ($funcoes as $funcao) { echo "<li>". $funcao; } echo "</ul>"; }
$str = file_get_contents('file.utf8.csv');
?>
Na parte Android (cliente), temos a classe da tela de login, que deve receber o ra e a senha, alem de passar para a classe do webservice os parametros:
Loginuser.java
EditText ura,pw; TextView error; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); // oculta barra de titulo do app setContentView(R.layout.loginuser); ura=(EditText)findViewById(R.id.editText2); pw=(EditText)findViewById(R.id.editText1); }
public void logar(View X) { TextView tv = (TextView) findViewById(R.id.tv); tv.setText("BOTAO"); ura=(EditText)findViewById(R.id.editText2); pw=(EditText)findViewById(R.id.editText1); Wssoap ws = new Wssoap(); TextView tv2 = (TextView) findViewById(R.id.tv2); tv2.setText(ws.Consultar("", ""));}
Além da classe com os parametros do Webservice, que utiliza a biblioteca KSOAP2.
public class Wssoap { private static final String SOAP_ACTION = "http://IPDOSERVIDOR/consultar"; private static final String METHOD_NAME = "consultar"; private static final String NAMESPACE = "http://IPDOSERVIDOR/"; private static final String URL = "http://IPDOSERVIDOR/app/soap/index2.php"; public String Consultar(String ra, String password) { SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); request.addProperty("ra", ra); request.addProperty("password", password); SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); //envelope.dotNet = false; envelope.setOutputSoapObject(request); try { HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); androidHttpTransport.call(SOAP_ACTION, envelope); SoapPrimitive result = (SoapPrimitive) envelope.getResponse(); return result.toString(); } catch (Exception e) { return ("ERRO: " + e.getMessage()); } }
Mas tem um problema, quando executo o programa, ao apertar o botão.. no local da TextView tv2 aparece ERRO:null. Alguém tem uma dica do que posso fazer? Ja estou procurando uma solução há 2 semanas..
Muito obrigada.
|
| 05 Out 2012, 00:27 |
|
 |
|
julioc2s
What is DDMS?
Data de registro: 06 Jan 2011, 08:31 Mensagens: 36
|
 Re: Android Ksoap2 consumindo webservice PHP
Caramba ... Acredita que eu tenho o mesmo problema, porém com o android:targetSdkVersion=8 no maninfest ele funciona, mas como a aplicação tem que ser no android:targetSdkVersion=15 , ele para de funcionar ! Tenta rodar com 8 ... se funcionar se junte a mim pra resolver a funcionar nas novas versoes ...
|
| 26 Out 2012, 11:14 |
|
 |
|
julioc2s
What is DDMS?
Data de registro: 06 Jan 2011, 08:31 Mensagens: 36
|
 Re: Android Ksoap2 consumindo webservice PHP
Descobri o motivo do problema. No android 3 ou mais recente, qualquer rotina de acesso à internet deve ser feito por meio de Thread ! Ex .:
Thread networkThread = new Thread() { @Override public void run() { try { SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("login", txtLogin.getText().toString() ); request.addProperty("senha", txtSenha.getText().toString());
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.dotNet=true; envelope.setOutputSoapObject(request); HttpTransportSE ht = new HttpTransportSE(URL); ht.call(SOAP_ACTION, envelope); final SoapPrimitive response = (SoapPrimitive)envelope.getResponse(); final String str; str = response.toString(); runOnUiThread (new Runnable(){ public void run() { TextView result; result = (TextView)findViewById(R.id.txtResult);//Text view id is textView1 result.setText(str); if (str.contains("validado")){ Intent it = new Intent(Login.this, Atualizacao.class); Login.this.startActivity(it); finish(); btnEntrar.setEnabled(true); } } }); } catch (Exception e) { e.printStackTrace(); } } }; networkThread.start();
|
| 31 Out 2012, 15:04 |
|
|
|
Página 1 de 1
|
[ 3 Mensagens ] |
|
Quem está online |
Usuários vendo este fórum: Abraao, ac0502, Aderbal Nunes, akaytatsu, alberto, allone, Andre, Androidthebest, billsombrio, bomcabelo, bozzano, bruno.abd, burujo, C0GuM3I0, camilodev, carlos rodrigues, carlos.macleod, Chassot, chunga, Costa, Cynthia, Darth Vader, deivisonrpg, developermaster, dikiloco, dirceuconte, edervieira, edlinux, Eduardo - Brasil, EduardoYC, erikopa, estratec, everaldo, EvertonLB, fabielp, faco, fernando neves, flashking, flaviojps, flaviolemos, free_w3000, FVB, Gabriel Laet, genildof, gfgodoy, guilhermesmo, Ielo8, inesfg, interservic, itsN, ixian, jacard, JackBlackJack, jackstuard, Jango Fett, Jar Jar Binks, jrchuteboxe, juliana_costa, Ki-Adi-Mundi, konos, kusanaguy, leofernandesmo, LForce, Lindberg, linukiss, lucasB, luciocamilo, luizfilipe, Lúcio Zanette, Machado000, maiconjunches, maolveira, marcelosv, maurofjr, Microdesk, Mig, mikasjau, Mvitor, Orivalde, paulabr, Paulo, phfmendes, pomarolli, rayberg, regis.ror, renegheller, ricardo_listadelphi, robertofonte, Rodrigo, rogeriokta, romuloff, romulotales, rubens_olv, samuel.cavanieri, scattonevi, sidnei.gs, SidneiCP, srmoreira, suportecr, taluna, tchou, teamamus, Telekom [Bot], Thelemita, thosjanas, tiagocordeiro, tirloni, waideman, wilsond, WiseNut e 3 visitantes |
|
Você não pode criar novos tópicos neste fórum Você não pode responder tópicos neste fórum Você não pode editar suas mensagens neste fórum Você não pode excluir suas mensagens neste fórum Você não pode enviar anexos neste fórum
|
|