¿Cómo llamar a HTTP URL usando wifi en el código J2ME para BlackBerry 5.0 y superior?
java-me (2)
Estoy llamando a un servicio web de BlackBerry utilizando el código J2ME. Cuando trato de abrir una conexión usando HttpConnection
, solo HttpConnection
verificando la conexión GPRS. Ahora, quiero verificar la conexión Wi-Fi y llamar a un servicio web a través de Wi-Fi.
El siguiente código es mi sección de conexión. ¿Cómo cambiar el código de una conexión wifi?
public boolean HttpUrl()
{
HttpConnection conn = null;
OutputStream out = null;
String url = "http://www.google.com";
try
{
conn = (HttpConnection) new ConnectionFactory().getConnection(url).getConnection();
if (conn != null)
{
conn.setRequestMethod(HttpConnection.POST);
conn.setRequestProperty("Content-Length", "application/x-www-form-urlencoded");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("User-Agent", "Profile/MIDP-2.0 Configuration/CLDC-1.0");
}
}
catch (Exception e)
{
return false;
}
finally
{
try
{
out.close();
}
catch (Exception e2)
{
}
}
//Only if exception occurs, we close the connection.
//Otherwise the caller should close the connection himself.
try
{
conn.close();
}
catch (Exception e1)
{
}
return true;
}
Verifique de esta manera:
HttpConnection conn = null;
String URL = "http://www.myServer.com/myContent;deviceside=true;interface=wifi";
conn = (HttpConnection)Connector.open(URL);
Hacer conexiones
La respuesta de Rafael funcionará si sabes que solo usarás Wi-Fi.
Sin embargo, si solo necesita soportar BlackBerry OS 5.0 - 7.1, le recomendaría que use ConnectionFactory
. Normalmente , no limitarás tu código a solo usar un transporte . Normalmente admitirá (casi) cualquier transporte que tenga el dispositivo , pero es posible que desee codificar primero su aplicación para elegir ciertos transportes.
Por ejemplo,
class ConnectionThread extends Thread
{
public void run()
{
ConnectionFactory connFact = new ConnectionFactory();
connFact.setPreferredTransportTypes(new int[] {
TransportInfo.TRANSPORT_TCP_WIFI,
TransportInfo.TRANSPORT_BIS_B,
TransportInfo.TRANSPORT_MDS,
TransportInfo.TRANSPORT_TCP_CELLULAR
});
ConnectionDescriptor connDesc;
connDesc = connFact.getConnection("http://www.google.com");
if (connDesc != null)
{
HttpConnection httpConn;
httpConn = (HttpConnection)connDesc.getConnection();
try
{
// TODO: set httpConn request method and properties here!
final int iResponseCode = httpConn.getResponseCode();
UiApplication.getUiApplication().invokeLater(new Runnable()
{
public void run()
{
Dialog.alert("Response code: " +
Integer.toString(iResponseCode));
}
});
}
catch (IOException e)
{
System.err.println("Caught IOException: "
+ e.getMessage());
}
}
}
}
elegirá el transporte de Wi-Fi si Wi-Fi está disponible, pero usa la conexión GPRS si no lo está. Creo que esto generalmente se considera la mejor práctica para los dispositivos 5.0+.
Propiedades de solicitud
Este código
conn.setRequestProperty("Content-Length", "application/x-www-form-urlencoded");
no es correcto. Content-Length
debe ser el tamaño, en bytes, de los parámetros HTTP POST. Vea un ejemplo aquí .
Enhebrado
Recuerde que hacer conexiones de red es lento. No bloquee la interfaz de usuario ejecutando este código en el hilo principal / UI. Coloque su código en una cadena de fondo para mantener la UI receptiva mientras solicita contenido remoto.