Me parece um JSON (eu sei que não é, ainda mais pelos diversos “=” dentro do código).
Mas, a estrutura é de JSON. Logo, eu faria um replaceAll("=", “:”) e outro replaceAll(";", “,”) e converteria em elementos JSON para ler com mais facilidade.
Ou quebraria em array de String com split(";") e daí leria item a item.
S
staroski2 likes
O indexOf é sobrecarregado, podendo passar o índice inicial da consulta.
Mas no seu caso, já que os campos são separados por ponto e vírgula, você pode fazer um split(";") da String.
A
AlisonSoldado
Fiz a pergunta errada pessoal, eu já fiz o split. Aí fui tentar fazer o indexOf pra pegar o valor do item deu erro.
Fiz dessa forma:
Mas ta dando erro, acredito que seja porque tem mais que um “ValorItem” e “Descrição”. Então, queria saber se tem como ir para o próximo indexOf, por exemplo
Obs: Nesse caso a variável “debitos” é um vetor objetos e a “descrição1” é um vetor de strings
A
AlisonSoldado
Como converter pra JSON?
L
Luis_Augusto_Santos
Existem bibliotecas para isso, como a Gson do google.
Neste caso, você precisaria de um POJO contendo os atributos que o teu JSON teria, pois faria a deserialização da String para objeto java (ou lista de objetos, enfim).
A
AlisonSoldado
Não deu certo dessa forma Luis…
Gente só quero pegar o valor do item “ValorItem”
Tipo:
primeiro valor do item “ValorItem” = 9.97 (Guardo na primeira posição do vetor)
segundo valor do item “ValorItem” = 9.97 (Guardo na segunda posição do vetor)
E assim por diante…
L
Luis_Augusto_Santos
Cara, lembra das aulas de MMC e MDC? Então, se uma sugestão não rolou, tenta encontrar a forma mais adequada de quebrar no menor pedaço possível para que você possa ler essas informações sem maiores problemas.
I
icarometal
Cola a mensagem de erro pra gente aqui.
A
AlisonSoldado
Não necessariamente da erro… O problema é que só pega o primeiro “ValorItem”, sendo que eu queria que pegasse todos “ValorItem” que tem no vetor de string
Seria um erro de lógica por minha parte…
I
icarometal
vou te ajudar. peraê…
A
AlisonSoldado
Beleza
I
icarometal1 like
Este código não vai te servir completamente, mas da pra você ter uma ideia da minha lógica, e aplicar ao seu código, ao que você quer fazer exatamente com este valor.
Eu fiz aqui, mas continua pegando o primeiro item.
Olha o código:
for(inti=0;i<debitos.length;i++){intaux=debitos[i].toString().indexOf("ValorItem=");//auxiliarrecebeValorItemnaposição23intaux2=0;while(aux!=aux2){//Enquantoauxiliarfordiferentequeaux2,façaintcontador=debitos[i].toString().indexOf("ValorItem=");//contadorrecebe23intinicio=debitos[i].toString().indexOf("Descricao=")+10;//iniciorecebe3descricao1[i]=debitos[i].toString().substring(inicio,contador-2);//descriçãoreceberáastring//queestiverentreessasduasposições,quenocasoé"Contrato de internet"aux2=aux;//aux2receberá23debitos[i].toString().replace("ValorItem=","");//substituioValorItemnaposição23pornadaaux=debitos[i].toString().indexOf("ValorItem=");//auxiliarrecebeoValorItemnapróximaposição,comoporexemplo50Log.i("descricao","Descrição Débitos: "+descricao1[i]);}}
A
AlisonSoldado
Eu tava lendo sobre o indexOf, parece que tem como começar de uma posição ou algo assim. Vi que tem uma propriedade dele assim “indexOf(int ch, int fromIndex)”. Você tem conhecimento sobre isso? Ou alguém poderia me explicar melhor? Porque não entendi muito bem
A
AlisonSoldado
Eu tava pensando aqui… Se for seguindo essa lógica, eu também tenho que trocar a “Descrição”. Dessa forma, não corro perigo de ler mais informação do que preciso.
uma dúvida, se você quebrou sua string em um array de strings, e cada posição i contem uma string no formato “item=valor” e ta dando um for em i, não faz sentido ele pegar somente o primeiro item, seu problema é a lógica de implementação. posta mais do código ai pra tentar te ajudar…
A
AlisonSoldado
Desculpa, achei que tinha seguido.
Eu troquei o “replace” para “replaceFirst”, e continua pegando o primeiro…
Se eu troco para -1 dá loop infinito.
Mas aí vai ter mais “=” na string e vou cair no mesmo caso
I
icarometal
como está sua String?
pelo que entendi você fez um split dos ; dentro de um vetor chamado debitos, correto?
se você fez isso, não tem mais de um = por string não.
então quando você pega o valor de débitos i, você está pegando somente aquele valor equivalente ao indice i;
então se vc tiver mais de um ValorItem, ele vai pegar todos, porem cada um estará em sua devida posição no vetor descricao1[i];
uma pergunta, o que você deseja fazer com este código? pelo que vejo é possivel refatorá-lo para tornar mais eficiente. se me explicar o que quer, te ajudo.
A
AlisonSoldado1 like
Na verdade eu criei um vetor de objetos, onde por exemplo tem 9 posições e em cada posição contém dentro essas informações (Vencimento, valor atualizado, valor…). No caso estou fazendo um “for” para armazenar a informação de cada um deles. Segue o código abaixo.
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.
I
icarometal
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?
A
AlisonSoldado
Por exemplo:
Tela da lista:
Item 1
Vencimento: 2018-04-10
ValorAtualizado: 29.92
Valor: 29.92
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
A
AlisonSoldado
Eu tava pensando em concatenar todos os “ValorItem” separando por um espaço para armazenar no banco e depois dar split pra exibir
I
icarometal
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
É… como está dando errro no replaceFirst não sei como lhe ajudar.
A
AlisonSoldado
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
L
Luis_Augusto_Santos
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?
A
AlisonSoldado
Amigável, como por exemplo?
L
Solucao aceita
Luis_Augusto_Santos2 likes
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>
I
icarometal2 likes
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.
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.
A
AlisonSoldado
Pedi pra mudar o WebService, agora ele retorna dessa forma:
Primeira vez que vou trabalhar com xml no android… Nem sei por onde começar. Alguma sugestão?
A
AlisonSoldado
Praticamente dois meses de projeto indo embora
L
Luis_Augusto_Santos
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.
A
AlisonSoldado
Valeu
A
AlisonSoldado
Aqui o primeiro parâmetro da propriedade replaceFirst está esperando um regex, isso ajuda em algo? Está assim: replaceFirst(String regex, string replacement)
importjava.io.*;publicclassTest{publicstaticvoidmain(Stringargs[]){StringStr=newString("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"));}}