2011-10-14 14 views
6

Me conecto a dos servidores (PROD es https, el servidor de prueba es http) en mis aplicaciones.Cuál es la diferencia entre httpconnection en J2ME y HttpUrlConnection en Android (http error 401)

en J2ME: puedo conectarme a estos dos servidores sin ningún problema. en Android No me puedo conectar al servidor de prueba. Cuando la conexión es http, si no utilizo setChunkedStreamingMode, no puedo obtener responseCode(StringIndexOutOfBoundsException); si uso setChunkedStreamingMode, el código de respuesta es 401. ¿Qué debería hacer, dónde es mi culpa?

Aquí está mi código de Android, también, si quieres ver el código de J2me, también puedo agregarlo.

URL url = new URL(getUrl()); 
      URLConnection conn = url.openConnection(); 
      HttpURLConnection httpConn = (HttpURLConnection) conn; 
      httpConn.setAllowUserInteraction(false); 
      httpConn.setInstanceFollowRedirects(true); 
      httpConn.setConnectTimeout(10000); 
      httpConn.setRequestProperty("User-Agent", util.getDeviceFullModel() 
        + " " + util.getSoftwareVersion()); 
      httpConn.setRequestProperty("Accept-Charset", "utf-8"); 

      httpConn.setRequestProperty("Content-Type", 
        "text/xml; charset=utf-8"); 
      httpConn.setRequestProperty("SOAPAction", 
        "http://tempuri.org/IAuthenticationServiceForGroup/"+conTypeString); 
      httpConn.setRequestProperty("Software-Version", AppData.VERSION); 
      httpConn.setChunkedStreamingMode(getParams().getBytes("UTF8").length); 
      httpConn.setRequestMethod("POST"); 
      httpConn.setDoOutput(true); 
      httpConn.setDoInput(true); 
      httpConn.connect(); 

      os = httpConn.getOutputStream(); 
      os.write(getParams().getBytes("UTF8")); 

      try { 
       os.close(); 
      } catch (Exception e) { 
       onError(e); 
      } 
      response=httpConn.getResponseCode(); 

código J2ME:

HttpConnection c = (HttpConnection)XConnection.openConnection(XConnection.SERVER + "AuthenticationServiceForGroup.svc"); 

      c.setRequestProperty("User-Agent", XUtil.getDeviceFullModel() + " " + XUtil.getSoftwareVersion()); 
      c.setRequestProperty("Content-Type", "text/xml; charset=utf-8"); 
      c.setRequestProperty("SOAPAction", "http://tempuri.org/IAuthenticationServiceForGroup/"+conType); 
      c.setRequestProperty("Software-Version", XApp.VERSION); 
      c.setRequestMethod(HttpConnection.POST); 

      OutputStream os = null; 

      os = c.openOutputStream(); 
      os.write(sParams.getBytes()); 

      try {os.close();} catch (Exception e) {} 

      if (c.getResponseCode() == HttpConnection.HTTP_OK) 
+1

¿podría agregar también su código j2me? –

+0

@yasin Lo agregué. – atasoyh

Respuesta

1

He resuelto este problema. Uso una dirección IP en lugar de un enlace. El servidor era el servidor Sharepoint, por lo que intenta conectarse directamente al servidor de SharePoint, por lo que el servidor quiere autenticación :) No use directamente la ip :)

Cuestiones relacionadas