2014-10-15 2 views
0

Я создал проект с веб-сервисами jQuery Mobile и Jersey. Когда я запускаю проект в браузере, я могу получить доступ к ссылке веб-сервиса, которая запускается через HTTPS.Защищенные веб-службы не работают в эмуляторе Android, пока тот же работает в веб-браузере.

Я создал проект Android с экраном входа и интегрировал вышеупомянутый проект, который будет иметь функции поиска и ударить веб-службу и вернуть ответ в html.

Когда я запускаю этот проект Android на эмуляторе, я могу войти в систему, и когда я нажимаю на конкретный поиск, я не получаю соответствующий ответ веб-службы.

Но когда я указываю на IP-адрес локального хоста, он работает.

Даже я добавил CORS в config.xml тоже:

<content src="index.html" /> 
+0

Если вы можете войти в систему, то проблема не с SSL сертификатом другой мудрый рукопожатие должно потерпели неудачу, если это было бы reason.Try, чтобы добавить поиск ответа или войти –

+0

Когда я нажимаю на поиск, функция ajax вызывается там, где элемент управления не идет в блок успеха и переходит в блок ошибок с кодом состояния ошибки 0. –

+0

Возникла проблема с вашим ajax –

ответ

0

Просто добавьте ниже метод, когда вы звоните своим WebServices, чтобы назвать это вы должны нуждаться HttpClient объект, так просто получить HttpClient объект с помощью метода ниже.

public static List<Cookie> cookies; 
public DefaultHttpClient getHttpclient() { 
     if (!isHTTPSEnabled()) { 
      HttpParams httpParameters = new BasicHttpParams(); 
      HttpConnectionParams.setConnectionTimeout(httpParameters, timeOut); 
      HttpConnectionParams.setSoTimeout(httpParameters, timeOut); 
      DefaultHttpClient httpclient = new DefaultHttpClient(httpParameters); 
      HttpClientParams.setRedirecting(httpclient.getParams(), false); 

      if (cookies != null) { 
       int size = cookies.size(); 
       for (int i = 0; i < size; i++) { 
        httpclient.getCookieStore().addCookie(cookies.get(i)); 
       } 
      } 
      httpclient.getParams().setParameter(CoreProtocolPNames.USER_AGENT, "android"); 
      return httpclient; 
     } else { 
      try { 
       KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); 
       trustStore.load(null, null); 

       SSLSocketFactory sf = new MySSLSocketFactory(trustStore); 
       sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); 

       HttpParams httpParameters = new BasicHttpParams(); 
       HttpConnectionParams.setConnectionTimeout(httpParameters, timeOut); 
       HttpConnectionParams.setSoTimeout(httpParameters, timeOut); 
       HttpProtocolParams.setVersion(httpParameters, HttpVersion.HTTP_1_1); 
       HttpProtocolParams.setContentCharset(httpParameters, HTTP.UTF_8); 

       SchemeRegistry registry = new SchemeRegistry(); 
       registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); 
       registry.register(new Scheme("https", sf, 443)); 

       ClientConnectionManager ccm = new ThreadSafeClientConnManager(httpParameters, registry); 
       DefaultHttpClient httpclient = new DefaultHttpClient(ccm, httpParameters); 
       HttpClientParams.setRedirecting(httpclient.getParams(), false); 

       if (cookies != null) { 
        int size = cookies.size(); 
        for (int i = 0; i < size; i++) { 
         httpclient.getCookieStore().addCookie(cookies.get(i)); 
        } 
       } 
       httpclient.getParams().setParameter(CoreProtocolPNames.USER_AGENT, "android"); 
       return httpclient; 

      } catch (Exception e) { 
      } 
     } 
     return null; 

    } 
+0

Большое спасибо Пратику за ответ. Но я очень смущен, где добавить код выше в моем проекте. Я вызываю webservice с моей jquery mobile html-страницы в функции ajax. –

+0

@PallaviAkuthota ohhh простите, дорогая, я знаю только программирование на родном языке, а не в кросс-платформе, но, как я знаю, когда вы вызываете свой метод запроса Http, перед этим вы должны это назвать. –

+0

@PallaviAkuthota это работает или нет? –