GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Percorrer várias Strings com o mesmo nome

java
programação
Tags: #<Tag:0x00007f804993eb00> #<Tag:0x00007f804993e0b0>

#21

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.


#22

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?


#23

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


#24

Eu tava pensando em concatenar todos os “ValorItem” separando por um espaço para armazenar no banco e depois dar split pra exibir


#25

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]);
		}
     }

#26

Deu loop infinito de novo… E aparece essa mensagem quando você clica no “replaceFirst” no android studio.


#27

É… como está dando errro no replaceFirst não sei como lhe ajudar.


#28

Não é que está dando erro. Ele está sendo ignorado, por alguma razão que não sei…
Mas obrigado por tentar me ajudar :slight_smile:
Vou tentar fazer alguma coisa com indexOf haha


#29

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?


#30

Amigável, como por exemplo?


#31

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>


#32

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.


#33

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.


#34

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>

#35

Primeira vez que vou trabalhar com xml no android… Nem sei por onde começar. Alguma sugestão?


#36

Praticamente dois meses de projeto indo embora :confused:


#37

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.


#38

Valeu :+1:


#39

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…


#40

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