Saltar para conteúdo


Foto
- - - - -

Erro ao procurar a 2ªvez


  • Por favor inicie sessão para responder
7 respostas a este tópico

#1 NunoDinis

NunoDinis

    Membro

  • Membros
  • PipPip
  • 22 mensagens
  • Samsung Galaxy Tab 10.1, Huawei G300

Mensagem publicada 23 November 2012 - 10:51

Bom dia,
Ao carregar sobre um botão, depois de preenhido o campo ordem ele vai consultar a BD e registar os dados referentes à ordem.
Até aqui funciona perfeito, porém, quando vou carregar a 2ªvez, ou seja, fazer nova pesquisa, ele dá-me erro.
Eu creio que seja devido aos arrays, se bem que já os tentei limpar e não resolvo o problema.

#2 Driver

Driver

    Membro

  • Membros
  • PipPip
  • 51 mensagens

Mensagem publicada 23 November 2012 - 20:13

Boas, posta algum código para ver como estás a fazer.

Cumps
Driver

#3 NunoDinis

NunoDinis

    Membro

  • Membros
  • PipPip
  • 22 mensagens
  • Samsung Galaxy Tab 10.1, Huawei G300

Mensagem publicada 24 November 2012 - 10:58

Aqui vai então.

public void DadosSAP() {
String urlGetSAP="[url="http://192.168.206.110:82/android/SAP.php?ordem="]http://192.168.206.1...SAP.php?ordem="[/url] + etOrdem.getText().toString();
String respostaRetornadaSAP = null;
try {
	respostaRetornadaSAP = ConexaoHttpClient.executaHttpGet(urlGetSAP);
	String respostaSAP = respostaRetornadaSAP.toString();
	if(respostaSAP.contains("A ordem")) {
	 Intent it = new Intent(Simple.this, Main.class);
	 finish();
it.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Simple.this.startActivity(it);
		
Toast.makeText(this, "Não existe a ordem " + etOrdem.getText().toString() + " em SAP", Toast.LENGTH_LONG).show();
		
	} else {
	 char separadarorSAP='#';
	 int contaUsuariosSAP=0;
	 for(int i=0;i<respostaSAP.length();i++)
	 if(separadarorSAP == respostaSAP.charAt(i))
	 contaUsuariosSAP++;
	 listaUsuariosSAP = new String[contaUsuariosSAP];
	
	 char caracter_lidoSAP=respostaSAP.charAt(0);
	
	 String nomeSAP="";
	 for (int i=0;caracter_lidoSAP != '^';i++)
	 {
	 caracter_lidoSAP = respostaSAP.charAt(i);
	 if (caracter_lidoSAP != '#')
	 {
	 nomeSAP+= (char) caracter_lidoSAP;
	 //Log.i("NOME","NOME::" + nome);
	 }
	 else
	 {
	 listaUsuariosSAP[posicaoSAP]=""+nomeSAP;
	 posicaoSAP++;
	 //Log.i("NOME2","NOME2::" + nomeSAP);
	 nomeSAP="";
	
	 etAc.setText(listaUsuariosSAP[0]);
	 etCor.setText(listaUsuariosSAP[1]);
	 listaUsuariosSAP[2]="";
	 etReferencia.setText(listaUsuariosSAP[3]);
	 listaUsuariosSAP[4]="";
	 //
	 }
	 }
	
	}
}
catch(Exception erro)
{
	Log.i("erro 1", "erro 1= "+erro);
}
}

Com esta função vou buscar através de um ficheiro PHP os valores (através de uma query).
Por exemplo, vou buscar o ac, referencia e a cor, que transporto assim : ValorAC#ValorRef#ValorCor#^ ( ex concreto : 152#234#vermelho#^) .
Depois separo a string e meto os valores num array, para depois os meter nas respetivas caixas de texto.
A primeira vez dá perfeitamente, a segunda dá-me erro. E indica para esta linha listaUsuariosSAP[posicaoSAP]=""+nomeSAP; .

Editado por NunoDinis, 24 November 2012 - 10:59.


#4 Driver

Driver

    Membro

  • Membros
  • PipPip
  • 51 mensagens

Mensagem publicada 25 November 2012 - 00:04

Aconselho-te a criares uma WebAPI REST no teu backend PHP por forma a teres suporte a JSON. O Android dá-te support out-of-the-box para JSON.

Isso creio que é simples de fazeres em PHP, depois no Android só tens que fazer new JSONObject(String jsonString); e navegas no objecto.

Fazer parsing de texto num dispositivo de recursos limitados não é aconselhável, uma vez que vais consumir muitos recursos.

#5 NunoDinis

NunoDinis

    Membro

  • Membros
  • PipPip
  • 22 mensagens
  • Samsung Galaxy Tab 10.1, Huawei G300

Mensagem publicada 25 November 2012 - 11:50

Obrigado.
Podes-me dar um link ou um exemplo de como criar uma WebAPI REST no meu ficheiro PHP ? Como nunca fiz, não estou à vontade.

#6 Driver

Driver

    Membro

  • Membros
  • PipPip
  • 51 mensagens

Mensagem publicada 25 November 2012 - 20:28

Epa, procura pelo Google, já existem algumas frameworks que te facilitam a criação de WebAPI's, (ver http://blog.programm...eworks-for-php/ ). Contudo, isso é simples de fazer, basta devolveres a representação dos Recursos como application/json .

#7 NunoDinis

NunoDinis

    Membro

  • Membros
  • PipPip
  • 22 mensagens
  • Samsung Galaxy Tab 10.1, Huawei G300

Mensagem publicada 25 November 2012 - 21:14

E é mesmo a única forma que tenho que fazer?
Não há possibilidade de recriar os objetos para eles ficarem zerados ?

#8 Driver

Driver

    Membro

  • Membros
  • PipPip
  • 51 mensagens

Mensagem publicada 26 November 2012 - 16:16

É assim, não é a única forma que tens de fazer, mas é a mais correcta. O Android está preparado para consumir serviços em WebAPI's, até é o aconselhável para poupares recursos.
Podes recriar os objectos, mas isso consome recursos, e não te esqueças que estás num ambiente com recursos limitados. Cada vez que crias um objecto, incrementas um pointer e quando o Garbage Collector entra em acção, tem mais trabalho, e isto deve ser evitado.

Alternativa: Crias uma WebAPP em PHP e fazes uma WebView no Android ( ver http://developer.and.../targeting.html ).

Cumps
Driver