Ir ao conteúdo
  • Cadastre-se

brunohpg

Membro Júnior
  • Posts

    13
  • Cadastrado em

  • Última visita

Reputação

0
  1. Olá, não use Robot para pegar dados da web, vai te dar muito trabalho, vai ocupar totalmente seu computador e muito provavelmente não terá um resultado satisfatório. O jeito mais simples é baixar o conteúdo da página fazendo uma conexão direta com o site. Se o site não tiver autenticação ou não for complexa, basta usar um HttpURLConnection, que já está na JRE padrão. Ele te retornará o html da página, ai é só dar um parse para encontrar o que precisa, como utilizar, por exemplo, pesquisa com métodos de string (indexof, replace, split...). No entanto, existem bibliotecas para dar parse em html que facilitam em casos complexos. Gosto do Jericho (http://jericho.htmlparser.net) para parser html. E também uso o apache httpclient para baixar os dados. Mas existem outros http clients, como okhttp. Em casos de autenticação, você precisará entender como o site faz isso. Ai irá envolver algumas coisas um pouco mais complexas. No entanto, já recomendo o Fiddler ou Charles como web proxy para depuração. E claro, tem coisas bem mais complexas... mas não sei se aplica haha. []s
  2. Não sei bem se entendi, mas... Altere o título da activity no AndroidManifest.xml ou use o método setTitle no onCreate.
  3. Olá, não fez nenhum sentido chama "this.join()", pois estaria esperando a própria thread terminar sua execução, que nunca aconteceria, pois a thread está executando o join. Seria como dizer "vou sair de casa quando eu estiver do lado de fora". O join espera que uma "outra" thread terminar sua execução. Logo, se você tem uma ordem, é preciso saber qual a thread anterior e esperar que ela termine (ou seja, imprima a letra anterior e termine). Assim, você deve dar um join na thread anterior. Segue o exemplo: public class ABC extends Thread { private String letra; private Thread threadAnterior; public ABC(String letra, Thread threadAnterior) { this.letra = letra; this.threadAnterior = threadAnterior; } public void run() { try { if (threadAnterior != null) { // Aqui espera até que a thread anterior termine, // ou seja, espera a letra anterior ser escrita threadAnterior.join(); } System.out.print(letra); } catch (Exception e) { } } public static void main(String[] args) { Thread a = new ABC("A", null); Thread b = new ABC("B", a); Thread c = new ABC("C", b); a.start(); b.start(); c.start(); } } No exemplo, a "thread a" não precisa esperar ninguém, pois é primeira letra. Já a "thread b" espera a "thread a" terminar, assim temos certeza que a letra A apareceu. E a "thread c" espera a "thread b" terminar. Logo primeiro aparece A, pois a "thread a" irá imprimir. Enquanto isso, a "thread b" está esperando a "thread a" terminar e a "thread c" esperando a "thread b" terminar. Quando a "thread a" termina (ou seja, sai do método run), B é impresso, pois o join da "thread b" irá sair da chamada. E assim acontece para "thread c", mas logo após a "thread b" terminar (ou seja, imprime B e sai do run).
  4. Olá, Para sumir com o item: Object item = getItem(index); remove(item); contatos.remove(item); notifyDataSetChanged(); Não precisa de outro código ali no if (resultado...
  5. Olá, é meio vago a explicação do problema. Mas não parece ter erro no código acima, então: você deu "return" no método que esse código está?
  6. Olá, não entendi muito bem o que você quer, mas no geral a resposta é: sim, tem como. Você pode ler linha a linha de um arquivo. Também pode gravar linha a linha. Logo, se você souber "interpretar" o conteúdo de cada linha, você pode ler e gravar as linhas que achar interessante. Recomendo usar as classes: BufferedReader para ler e Writer para gravar, já que irá ler e gravar texto. Também recomendo definir explicitamente um charset, como UTF8. Exemplo de leitura (não testei): FileInputStream fileIn = new FileInputStream(file); BufferedReader reader = new BufferedReader(new InputStreamReader(fileIn, "UTF8")); LinkedList<String> linhas = new LinkedList(); String linha = null; while((linha = reader.readLine()) != null) { linhas.add(linha); } fileIn.close(); // Se precisar em array use: linhas.toArray(new String[linhas.size]); O resultado é a lista linhas. Se precisar em array, use o código acima para converter. Exemplo de escrita (também não testei): FileOutputStream fileOut = new FileOutputStream(file); Writer writer = new OutputStreamWriter(fileOut, "UTF8"); for(String linha : linhas) { writer.write(linha); writer.write("\r\n"); // Isso faz pular linha (modo windows) } writer.flush(); // Faça isso, pois o writer tem buffer fileOut.close(); A entrada é a variável "linhas" que pode ser tanto uma lista como um vetor. Apenas esses dados irá para o arquivo. O modo de quebra de linha foi colocado como o modo utilizado no windows CrLf (\r\n). Se for usar no Linux, pode usar apenas \n. Em ambos casos, a variável file indica o nome do arquivo ou objeto do tipo File que é o destino.
  7. Eu tinha pesquisado sobre a bateria, mas não tinha encontrado muita coisa. Mas procurando novamente, e incluindo a palavrinha datasheet, encontrei um manual. A recomendação para carregamento de tensão de flutuação é em torno de 13,5v a tensão constante, sem necessidade de corrente constante. Anteriormente, eu pensei usar usar um LM317, mas pelos cálculos que fiz, a dissipação de potência no resistor era muito grande e não valida a pena. Estou usando bateria de caminhão, não posso desperdiçar muita coisa. Mas não fiz os cálculos para o LM350. Então, talvez o projeto mais simples é regular a entrada para 13v~13,5v e deixar em ligado direto à bateria. Como essa é a tensão de flutuação da bateria, quando terminar de carregar, ela irá parar de ter corrente, uma vez que os pólos terão a mesma tensão da entrada. O inteligente seria variar a tensão de flutuação com a temperatura. Existem alguns CIs para isso, inclusive parece que LM350 daria conta, mas estou pensando em deixar uma tensão para uma temperatura maior, entorno de 35~40ºC, que será meu cenário. Com temperatura maior, menor a tensão. Carregar a bateria com tensão inferior eu não sei se danifica ela. Mas obviamente eu terei menor capacidade armazenada. Assim, eu não preciso de outra fonte chaveada também, bastaria eu reduzir um pouco a tensão de 13,5v, para próximo de 12v. Só preciso de outra fonte DC-DC para 5v. O circuito cut-off é importante. Vou pensar como elaborar isso. valeu!
  8. Na verdade duas das fontes chaveadas são necessárias, mesmo sem o UPS. Eu preciso de 12v e 5v a partir de uma entrada de 24v. Estou usando duas fontes para que haja um isolamento de curto-circuito entre elas. E sim, elas são DC-DC. Já tenho várias. Eu só adicionei uma fonte chaveada a mais. Mas, devido a baixa corrente necessária, eu consigo comprar com preços muito baixos, algo entorno de 6 reais (uma com lm2596, que aguenta até 3A). Ela só precisa ter 0.7A. Sobre o carregamento, estou estudando como funciona. Meu projeto já considerou o que encontrei de informação: carregar com 1,5v a mais que o valor da bateria (13,5v = 12v + 1,5v) e a 10% da capacidade (considerando uma bateria de 7Ah), ou seja, 0.7A. O meu design foi para isso.
  9. Não fiz os testes, mas tente três coisas: - Crie o Gson com builder: Gson g = new GsonBuilder().create(); // não sei se vai mudar algo - Crie um objeto para encapsular a lista: public static class Encapsulador { public List<Contato> contatos; } Defina o campo "contatos" e use o Gson sobre o objeto Encapsulador. Se der certo, então pode ser que o Gson não funcione corretamente direto em uma lista. - Converta a lista em array e passe ao Gson... gson.toJson(lista.toArray(new Contato[lista.size])); E claro, assumi que os objetos estão na lista! Pode fazer alguma saída de log ou debug para verificar se estão na lista no momento da conversão.
  10. Olá, ficou bem vago a explicação, mas vou supor que o app funcione via internet e quer que ele funcione somente dentro. Como o @TwistedSoul explicou, não seria prático mudar o app em tão pouco tempo e sem conhecimento. Então, tem uma solução provisória, se esse for o problema: ative no servidor um firewall que restringe conexões externas nas portas utilizadas pelo app. Se for um servidor HTTP e outro serviço funcionar junto, então você precisará de um proxy para bloquear o tráfego específico ou separar os serviços. Dessa forma, o servidor irá impedir que seja acessado externo. Não é simples, mas não precisa mudar o app. E só funciona se for o caso suposto!
  11. Olá, Não sei a relação do erro com seu código. Eu fiz e uso um código semelhante ao seu em uns 4 apps e não tenho problemas. Então, acho que o erro é outra coisa. Duvido muito que seja o BufferedReader, pois a implementação dele era em Java. Mas de toda forma, abaixo tem outra abordagem. Faça alguns testes: - Se você não precisa explicitamente de definir o User-Agent, remova o código que o define; - Informe o sistema que você irá ler a resposta, colocando antes de conectar: con.setDoInput(true); - Após configurar a request, use o método connect: con.connect(); - Verifique se você adicionou as permissões para acesso à internet; - Mais uma coisa: como você está chamando a AsyncTask? Se tiver iniciando errado, a partir da UI Thread, o Android não irá permitir algumas ações. Outra coisa, eu iria dizer para não usar StringBuffer onde pode usar StringBuilder. StringBuffer use somente quando o objeto for acessado por mais de uma thread. StringBuilder é mais simples e tem a mesma função, só não é thread safe. No seu caso, não precisa se preocupar, apenas a thread do async acessa, então use StringBuilder. Mas eu olhei o código que vi que está usando um monte de coisa para fazer pouca coisa! Primeiro, lendo linha a linha e depois concatenando no StringBuffer, você está removendo a quebra de linha... e depois, está criando objetos que não preicsa, como Strings. Além do mais, defina um charset esperado no reader, ou ficará dependente da máquina e pode dar problemas em situações específicas (lembro que um app meu deu pau no Japão). Um jeito mais simples (ou melhor, mais econômico), é: Reader in = new InputStreamReader(con.getInputStream() /*, sugiro colocar um charset aqui! */); StringBuffer response = new StringBuffer(); char[] buf = new char[32]; int len = 0; while((len = in.read(buf)) >= 0) { response.append(buf, 0, len); } in.close(); String resposta = response.toString(); Acho que isso já vai resolver o problema. Provavelmente é o setDoInput(true)...
  12. Obrigado pela resposta, Bommu Perneta. Eu cheguei a procurar alguns modelos de UPS, porém, ou são muito caros ou o tempo de entrega os torna inviável. Encontrei dois modelos procurando por "nobreak dc", com capacidade de 2Ah e 5Ah. O de 5Ah me pareceu interessante. Mas de toda foram, comecei a projetar alguma coisa baseada na ideia de usar o controlador para determinar quando carrega a bateria. Eu não tenho experiência em projeto de circuitos, mas alguma teoria... Só fiz o esboço num papel: Usei uma fonte de entrada de 24v, que irá alimentar o circuito de fontes chaveadas de 12v e 5v. Prefiro não colocar as fontes em cascata, pois caso haja um curto-circuito na fonte de 12v, a fonte de 5v pode continuar funcionando. A ideia é recarregar a bateria acionando o relê. A fonte chaveada depois do relê converte a entrada para tensão 14,5v (e uma corrente constante). O D2 reduz a tensão em 1v, chegando 13,5v à bateria. Carregando ou não, mas com energia primária de 24v ativa, a tensão após D3 (que será ~23v) sempre será maior que a tensão da bateria (quando não carregando) de 12v ou a tensão de carregamento (13,5v). Logo não terá corrente passando por D3 quando a energia primária estive ligada e a bateria irá recarregar corretamente. Para determinar se a bateria está carregada ou não, preferi uma abordagem mais simples que ADC. Coloquei um zener de 11v (poderia ser outra tensão, dependendo da sensibilidade) e um divisor de tensão para reduzir o sinal para 2,1v~3,3v (que é a tensão que eu espero). O zener só irá conduzir se a bateria estiver >= 11v. Logo, quando parar de conduzir, deve-se ativar o carregamento. Pensei em manter o carregamento por um tempo fixo, uma vez que não saberei quando terminou. O D1 é para não ir corrente da bateria à energia primária. O D2 propósito semelhante ao D1, quando o relê estiver ativo (ou seja carregando) e houve falta de energia. O circuito deve conduzir da bateria sempre que a energia primária cair, passando pelo D3. Esse diodo teria que ter a menor queda de tensão possível. A fonte chaveada de 12v, tem queda interna de tensão. Isso é um problema. Quando ativado na bateria, a tensão será inferior a 12v, estimo algo cerca de 9v. No meu projeto isso não será grande problema. Por fim, coloquei um C1 só para suprimir o transitório da ativação da bateria quando a energia primária acabar. Não sei se é necessário, uma vez que as fontes chaveadas tem capacitores para evitar oscilações. Mas, foi por segurança. Algumas melhorias que podem ser aplicadas: substituir o relê por mosfet (entretanto perde o isolamento com altas tensões e o controlador) [e eu não sei dimensionar mosfet...]. Outra melhoria seria ativar o relê (ou mosfet) a partir da ausência de tensão após o zener. Porém, essa abordagem teria que ativar o relê e só desativa-lo após a corrente na bateria ser baixa, uma vez que, após ativar, a tensão na bateria será 13,5v (de carregamento) e o zener irá conduzir e o sistema desativará! Então precisaria de algo para manter ligado e só desligar o carregamento quando estiver completo (baixa corrente). O que acham?
  13. Olá pessoal, estou desenvolvendo um sistema que deve funcionar 24/7 em um veículo, mais precisamente, em um caminhão. A tensão do veículo é ~24v e tenho equipamentos sensíveis que funcionam em 12v e 5v. Já estou utilizando fontes que convertem para as tensões desejadas e está tudo funcionando. Porém, recentemente instalei o equipamento em um caminhão que está cortando a energia primária do sistema (os 24v), aparentemente aleatoriamente. Para isso, pensei em desenvolver um sistema UPS (uninterruptible power supply) simples, utilizando uma bateria selada de 12v e alguns diodos. Entretanto, sei que carregar baterias indefinidamente ou sem cuidado pode ser perigoso e reduz a capacidade bateria prematuramente. Gostaria de saber se alguém tem um circuito UPS, ou mesmo me apresentar um módulo pronto, onde consigo ter uma saída de 12v ou apenas 5v utilizando baterias. No cenário em questão, é apenas para manter o sistema ativo por algumas horas, durante a falta de energia. Em casos extremos, manterei apenas a tensão 5v para o computador de bordo. Já li no fórum que o ideal é recarregar a bateria de 1,5v a 2v a mais que a tensão da bateria e a 10% da corrente da bateria. Mas estou procurando um circuito mais inteligente para aumentar a durabilidade da bateria. P.S: como deve ter observado, tenho um computador de bordo! Eu posso medir e controlar a corrente se necessário. Talvez com um ADC + potenciômetro digital. Eu pensei na possibilidade de colocar um ADC na bateria, e um relê para carregamento. Quando a bateria chegar a um nível específico, eu ativo o carregamento. Mas, estou procurando ideias mais simples. Muito obrigado.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!