2011-10-14 10 views
6

Łączę się z dwoma serwerami (PROD to https, serwer testowy to http) w moich aplikacjach.Jaka jest różnica między połączeniem http na J2ME i HttpUrlConnection na Androidzie (błąd http 401)

na J2ME: Mogę połączyć się z tymi dwoma serwerami bez problemu. na Android nie mogę połączyć się z serwerem testowym. Gdy połączenie jest http, jeśli nie używam setChunkedStreamingMode, nie mogę uzyskać responseCode(StringIndexOutOfBoundsException);, jeśli używam setChunkedStreamingMode, kod odpowiedzi to 401. Co powinienem zrobić, gdzie jest moja wina?

Oto mój kod Android, również jeśli chcesz zobaczyć kod J2me, mogę go również dodać.

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(); 

kod 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

czy mógłbyś też dodać swój kod j2me? –

+0

@ yasin Dodałem go. – atasoyh

Odpowiedz

1

I rozwiązać ten problem. Używam adresu IP zamiast linku. Serwer był serwerem SharePoint, więc próbuje połączyć się z serwerem Sharepoint, więc serwer chce Uwierzytelnienia :) Nie używaj bezpośrednio ip :)

Powiązane problemy