O WebService me retorna esse vetor de objetos e eu tenho que salvar no banco Sqlite e mostrar uma lista com alguns itens e quando o usuário clica no item, aparece todo o detalhe dele.
E isto está funcionando para itens que tem apenas uma aparição, mas não funciona para itens como ValorItem e Descrição que se repetem, certo?
neste caso voltamos a primeira lógica do while…
uma pergunta: você quer estes valores, tipo valorItem somados, ou 2 valorItem separados dentro do seu vetor?
Por exemplo:
Tela da lista:
Item 1
Vencimento: 2018-04-10
ValorAtualizado: 29.92
Valor: 29.92
Item 2
Vencimento: 2018-03-10
ValorAtualizado: 29.92
Valor: 29.9
Aí o usuário clica no item 1
Tela detalhe
Item 1
Vencimento: 2018-04-10
ValorAtualizado:29.92
Valor:29.92
Sequencia:9999
NroBanco:9999
BcoCobr:Banco
Cobranca:Boleto
Itens:
Descricao:Contrato;
ValorItem:9.97
Descricao:Contrato
ValorItem:19.95
Eu tava pensando em concatenar todos os “ValorItem” separando por um espaço para armazenar no banco e depois dar split pra exibir
Dei uma adaptada naquela lógica do while, acho que o problema no loop infinito é porque o replaceFirst não tava funcionando. tenho minhas dúvidas, mas acho que é porque ele tava trabalhando com o vetor diretamente.
dei uma leve adaptada usando mais uma variavel… faz um teste ae
for(int i = 0; i < debitos.length; i++){
String aux2 = debitos[i].toString();
Integer aux = aux2.indexOf("ValorItem=");
while (aux != -1) {
int contador = aux2.indexOf("ValorItem=");
int inicio = aux2.indexOf("Descricao=")+10;
descricao1[i] = aux2.substring(inicio, contador-2);
aux2.replaceFirst("ValorItem=", "");
aux = aux2.indexOf("ValorItem=");
Log.i("descricao", "Descrição Débitos: " + descricao1[i]);
}
}
Deu loop infinito de novo… E aparece essa mensagem quando você clica no “replaceFirst” no android studio.
É… como está dando errro no replaceFirst não sei como lhe ajudar.
Não é que está dando erro. Ele está sendo ignorado, por alguma razão que não sei…
Mas obrigado por tentar me ajudar
Vou tentar fazer alguma coisa com indexOf haha
Vi, em uma das respostas, que a String é retornada por um WebService. Porém, um WebService vai devolver de acordo com o que for especificado como formato de saída.
É possível alterar este WS para que a saída seja mais amigável?
Amigável, como por exemplo?
Como um JSON ou um xml, em que há um padrão mais simples de se ler e no qual seja possível utilizar uma ferramenta já existente.
Senão você vai empreender um tempo e esforço muito grandes (está desde ontem aqui e envolveu diversos caras bons), com retorno quase nulo.
Se você tivesse isso em xml, por exemplo, teria algo parecido com isso
<debito-pendente> <debito> <vencimento>2018-04-10</vencimento> <valor-atualizado>29.92</valor-atualizado> <valor>29.92</valor> <sequencia>9999</sequencia> <nro-banco>9999</nro-banco> <bco-cobr>Banco</bco-cobr> <cobranca>Boleto</cobranca> <itens> <descricao>Contrato</descricao> <valor-item>19.95</valor-item> </itens> </debito> </debito-pendente>
com pouca adaptação, você retornaria isso em um JSON, usava uma biblioteca pronta pra destrinchar em objetos, e estaria pronto. não tinha me ligado que o WS era seu.
Segue a dica do @Luis_Augusto_Santos que é sucesso.
Concordo com o @Luis_Augusto_Santos.
Acha um jeito de botar essa string num formato de JSON e faz um parse pra uma classe representando a estrutura. Depois disso vai ficar muito mais fácil pra trabalhar e você perderá menos tempo dando manutenção nisso.
Pedi pra mudar o WebService, agora ele retorna dessa forma:
<status xsi:type="xsd:int">1</status>
<erro_code xsi:type="xsd:int">0</erro_code>
<erro_desc xsi:type="xsd:string"/>
<result xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="tns:DebitosPendentes[26]">
<item xsi:type="tns:DebitosPendentes">
<Vencimento xsi:type="xsd:string">2018-04-10</Vencimento>
<ValorAtualizado xsi:type="xsd:decimal">29.92</ValorAtualizado>
<Valor xsi:type="xsd:decimal">29.92</Valor>
<Sequencia xsi:type="xsd:string">9999</Sequencia>
<NroBanco xsi:type="xsd:int">9999</NroBanco>
<BcoCobr xsi:type="xsd:string">Banco</BcoCobr>
<Cobranca xsi:type="xsd:string">Boleto</Cobranca>
<Itens xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="tns:ListaItens[2]">
<item xsi:type="tns:ListaItens">
<Descricao xsi:type="xsd:string">Contrato</Descricao>
<ValorItem xsi:type="xsd:decimal">9.97</ValorItem>
</item>
<item xsi:type="tns:ListaItens">
<Descricao xsi:type="xsd:string">Contrato</Descricao>
<ValorItem xsi:type="xsd:decimal">19.95</ValorItem>
</item>
</Itens>
</item>
<item xsi:type="tns:DebitosPendentes">
<Vencimento xsi:type="xsd:string">2018-03-10</Vencimento>
<ValorAtualizado xsi:type="xsd:decimal">29.92</ValorAtualizado>
<Valor xsi:type="xsd:decimal">29.92</Valor>
<Sequencia xsi:type="xsd:string">9999</Sequencia>
<NroBanco xsi:type="xsd:int">9999</NroBanco>
<BcoCobr xsi:type="xsd:string">Banco</BcoCobr>
<Cobranca xsi:type="xsd:string">Boleto</Cobranca>
<Itens xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="tns:ListaItens[2]">
<item xsi:type="tns:ListaItens">
<Descricao xsi:type="xsd:string">Contrato</Descricao>
<ValorItem xsi:type="xsd:decimal">9.97</ValorItem>
</item>
<item xsi:type="tns:ListaItens">
<Descricao xsi:type="xsd:string">Contrato</Descricao>
<ValorItem xsi:type="xsd:decimal">19.95</ValorItem>
</item>
</Itens>
</item>
Primeira vez que vou trabalhar com xml no android… Nem sei por onde começar. Alguma sugestão?
Praticamente dois meses de projeto indo embora
Cara, se tivesse dito que era no android nem teria sugerido XML. Pedisse direto json, que é mais natural a quem trabalha com android.
De qualquer forma, dá uma pesquisada sobre como ler XML em java, vai ajudar muito.
Valeu
Aqui o primeiro parâmetro da propriedade replaceFirst está esperando um regex, isso ajuda em algo? Está assim:
replaceFirst(String regex, string replacement)
Como você colocou:
debitos[i].toString().replaceFirst("ValorItem=", "");
Eu acho que é por isso que foi ignorado, porque você não está colocando um regex no primeiro parâmetro…
Não, não…
neste caso, regex também aceita a string a ser substituída.
veja este exemplo:
https://www.tutorialspoint.com/java/java_string_replacefirst.htm
import java.io.*;
public class Test {
public static void main(String args[]) {
String Str = new String("Welcome to Tutorialspoint.com");
System.out.print("Return Value :" );
System.out.println(Str.replaceFirst("(.*)Tutorials(.*)", "AMROOD"));
System.out.print("Return Value :" );
System.out.println(Str.replaceFirst("Tutorials", "AMROOD"));
}
}
Saída:
Return Value :AMROOD
Return Value :Welcome to AMROODpoint.com