na Midlet esou usando esse código…
ele acessa normalmente pois ele cria o arquivo de texto quando acessa a página, e está criando normalmente, só não está enviando corretamente a String para escrever no arquivo…
Thread t = new Thread( ) {
public void run( ) {
try {
String dadosStr = "CRIANÇA ESPERANÇA";
System.out.println("iniciou");
HttpConnection c = null;
c = (HttpConnection)Connector.open("http://189.81.4.140:8084/WorkService/GravaItensServlet", Connector.READ_WRITE);
//c = (HttpConnection)Connector.open("http://e-log.no-ip.info:8080/servlets-examples/servlet/RqExample/?XXX=BBB", Connector.WRITE);
c.setRequestMethod(HttpConnection.POST);
c.setRequestProperty("User-Agent", "Profile/MIDP-1.0 Configuration/CLDC-1.0");
c.setRequestProperty("Content-Language", "en-US");
c.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
c.setRequestProperty("User-Agent", "Profile/MIDP-2.0 Configuration/CLDC-1.1");
c.setRequestProperty("Accept", "application/octet-stream");
OutputStream os = null;
System.out.println("OutputStream os = null;");
os = c.openDataOutputStream();
byte dados[] = dadosStr.getBytes();
for (int i = 0; i < dados.length; i++)
{
os.write(dados[i]);
}
os.flush();
os.close();
} catch (IOException ex) {
// Handle error
} finally {
}
}
};
t.start();
De uma olhada neste Classe, é uma Thread que solicita alguns dados de uma servlet que no meu caso possui conexão com banco de dados, e retorna um ByteArray, após verificar se o download foi executado corretamente, leio as informações e gravo em um RMS dentro do meu dispositivo movel.
class ImportData extends Thread {
public void run() {
try {
HttpConnection con = (HttpConnection) Connector.open("http://localhost:8080/ServerDatabaseB/ServletDatabase?protocolo=passo1");
int status = con.getResponseCode();
if ( status == HttpConnection.HTTP_OK){
DataInputStream in = con.openDataInputStream();
String candidato = in.readUTF();
if(candidato.equals("Erro Servidor")){
get_alStatus().setString("Erro no servlet! Provavelmente BD");
getDisplay().setCurrent(get_alStatus(),get_lsPrincipal());
}else{
while (!candidato.equals("fim")){
inserirRMS(candidato,0);
candidato = in.readUTF();
}
get_alStatus().setString("Terminou de importar candidatos");
getDisplay().setCurrent(get_alStatus(),get_lsPrincipal());
}
} else {
get_alStatus().setString("Erro: Conexão Codigo "+status);
getDisplay().setCurrent(get_alStatus(),get_lsPrincipal());
}
} catch (Exception e) {
get_alStatus().setString("Erro: Conexão "+e.getMessage());
getDisplay().setCurrent(get_alStatus(),get_lsPrincipal());
}
}
private void inserirRMS(String candidato, int voto) {
try {
ByteArrayOutputStream bout = new ByteArrayOutputStream();
DataOutputStream out = new DataOutputStream(bout);
out.writeUTF(candidato);
out.writeInt(voto);
out.flush();
rs.addRecord(bout.toByteArray(),0,bout.toByteArray().length);
} catch (RecordStoreNotOpenException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
} catch (RecordStoreException ex) {
ex.printStackTrace();
}
}
}
Espero ter ajudado, qualquer duvida poste novamente aqui.
ai vai o código para quem quizer um exemplo de como enviar uma String com o método POST para um Servlet…
testei e funciona tudo perfeitinho… nesse exemplo ele não recebe resposta do servlet, apenas envia a String.
import java.io.OutputStream;
import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
/**
*
* @author Administrador
*/
public class SendPedServlet {
// Thread t = new Thread( ) {
// public void run( ) {
public SendPedServlet(String StrEnviar){
try {
HttpConnection conection = (HttpConnection) Connector.open("http://localhost:8084/WorkService/GravaItensServlet", Connector.READ_WRITE);
conection.setRequestMethod(HttpConnection.POST);
conection.setRequestProperty("IF-Modified-Since","20 Jan 2001 16:19:14 GMT");
conection.setRequestProperty("User-Agent","Profile/MIDP-1.0 Confirguration/CLDC-1.0");
conection.setRequestProperty("Content-Language", "en-CA");
conection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
String dados = "dados="+ StrEnviar; //"dados=" é o parametro do Servlet, o que vier seguinte é a String a ser enviada.
byte[] data = dados.getBytes();
conection.setRequestProperty("Content-Length", Integer.toString( data.length ) );
/* passando parâmetros */
OutputStream out = conection.openOutputStream();
out.write(data);
out.close();
}
catch (Exception e) {
}
finally {
}
}
}