Boa noite. Eu peço desculpas de antemão mas estou com um problema seríssimo.
Preciso externalizar dados de uma aplicação J2ME para sincronizar as mesmas com uma aplicação no Computador.
A forma que eu acho que seria a mais simples, seria gravar os dados em um arquivo, seja ele XML ou TXT e enviá-lo para a máquina via BlueTooth.
Porém, tudo que eu encontrei não funciona. Pedem para usar o FileConnection, mas no NetBeans Mobility não funciona, dá pau. Tentei apenas criar o .jar e enviar para os telefones, um Nokia, um Motorola e um Sony-Ericksson. Nenhum dos tres aparelhos aceitou a funcionalidade.
Então por favor, pelo amor de tudo que é mais sagrado, eu não estou aguentando mais pesquisar e não encontrar nada. Não é possível que não haja como fazer isso.
Se o problema é permissões de escrita, é possível modificar isso?
Ou existe uma outra forma de se fazer?
Para XML eu tentei usar o Kxml2, que como parser é muito bom, mas não funciona para gravar no arquivo.
Obrigado pela atenção.
[RESOLVIDO]
Depois de muito bater cabeça e nem os mestres de java do meu trampo saberem como se fáz, dei sorte e achei como fazer.
O macete é usar o FileConnection, porém dentro de uma Thread, assim:
new Thread(new Runnable() {
public void run() {
FileConnection fc = null;
try{
fc = (FileConnection)Connector.open("file://localhost/root1/teste.txt");
if (!fc.exists()) {
throw new IOException("O arquivo não existe.");
}
//InputStream fis = fc.openInputStream();
OutputStream write = fc.openOutputStream();
write.write("Vamos ver se vai funcionar mesmo".getBytes());
// //Para ler faça Assim:
// byte[] b = new byte[1024];
// int length = fis.read(b, 0, 1024);
// String obj = new String(b,0,length);
// fis.close();
// //Para ler faça Assim:
fc.close();
}catch(Exception e){}
}
}).start();
Estando dentro da Thread ele processa o arquivo, fora não.
Espero que sirva para alguém como servirá para mim.
Abraço a todos !!
Na verdade assim, pelo muito que pesquisei, sei que existe 2 tipos de sistema de arquivos.
Existe a maneira de vc abrir um arquivo enviado pelo .jar e a outra maneira é pegar os arquivos do sistema do celular.
Pelas pesquisas vi que com o FileConnection você consegue acessar os arquivos do palm de uma determinada pasta, mais não consegue acessar os arquivos enviados pelo .jar. E no ponto usando a classe midlet.getClass().getResourceAsStream(“xx.txt”) ele pega só arquivos do .jar, mais só abre, tb não consigo fazer a gravação dos arquivos.
Também me matei e até agora não estou conseguindo ler e gravar arquivos usando o FileConnection, pois no celular funciona, mais coloco no palm já não fumega. rsss
Dae pessoal, utilizei o codigo do inicio para criar o código de que preciso, que é coletar os dados armazenados no RMS e gerar um xml. Mas no simulador do Wireless Tolkit aparece que o aplicativo está tentando ler e escrever e pede autorização e não acontece. Alguem poderia me dizer se o problema é no código ou na configuração do emulador:
O aplicativo gera o arquivo no emulador, mas fica pedindo a cada loop para ler ou gravar no arquivo. AntonioDiego, como tu falou em Bluetooth, tu tens uma sugestão de como eu posso enviar este arquivo gerado por Bluetooth.
na maioria das conexoes basta voce ter os bytes do arquivo ,ou qualquer bytes que voce queira enviar.
//voce tem os bytes no array
byte[] bytes=new byte[1024];//bytes que serao enviados
DataOutputStream out=conn.openDataOutputStream();
out.write(bytes);
out.flush;
//se o arquivo for muito grande tera que usar um buffer ,pois o java me nao pode alocar muitos bytes e da outofmemory
//tem o inputstream do arquivo- in
byte[] buffer=new byte[1024];
int byteslidosnobuffer=0;
while((byteslidosnobuffer=in.read(buffer)!=-1){// in.read(buffer) ler do arquivo para o array de bytes e retorna quantos bytes faram lidos,o mesmo que in.read(buf,0,buf.length);
out.write(buffer,0,byteslidosnobuffer);
out.flush;
}
Bom pergunta algumas vezes para ler ou gravar, acho que isso é normal. Mas alguém sabe me dizer pq na Thread o código não chama o alert e na estrutura try catch ele entra nos dois no debug.
private void gerarXML() {
new Thread(new Runnable() {
public void run() {
FileConnection fc = null;
try{
ObjectSet os = pm.find(Infracao.class, null, new OrdemId());
String arquivo = System.getProperty("fileconn.dir.photos") + "Teste.xml";
String teste;
fc = (FileConnection)Connector.open(arquivo);
if (!fc.exists()) {
fc.create();
}
OutputStream escreve = fc.openOutputStream();
teste = "<?xml version='1.0' encoding='ISO-8859-1'?>\r\n<infracoes>\r\n";
while (os.hasNext()){
Infracao infracao = (Infracao) os.next();
teste = teste + "<infracao cd_infracao='" + infracao.getCd_infracao() + "'>\r\n" +
"<nr_agente>" + infracao.getNr_agente() + "</nr_agente>\r\n" +
"<placa>" + infracao.getPlaca() + "</placa>\r\n" +
"<modelo>" + infracao.getModelo() + "</modelo>\r\n" +
"<local>" + infracao.getLocal() + "</local>\r\n" +
"<tipo>" + infracao.getTipo() + "</tipo>\r\n" +
"<data>" + infracao.getData() + "</data>\r\n" +
"<hora>" + infracao.getHora() + "</hora>\r\n" +
"<obs>" + infracao.getObs() + "</obs>\r\n" +
"<nulo>" + infracao.getNulo() + "</nulo>\r\n" +
"</infracao>\r\n";
}
teste = teste + "</infracoes>\r\n";
escreve.write(teste.getBytes());
getAlStatus().setString("Arquivo Gerado.");
getAlStatus().setType(AlertType.INFO);
switchDisplayable(alStatus, getAlStatus());
escreve.flush();
}catch(Exception e){
getAlStatus().setString("Erro na geração do arquivo. ");
getAlStatus().setType(AlertType.ERROR);
switchDisplayable(alStatus, getAlStatus());
}
}
}).start();
}