6

Kimlik doğrulama gerektiren bir Rails Uygulama Sunucusuna bağlanmaya çalışıyorum. Java için Jakarta HTTP İstemcisi'ni bir Masaüstü uygulamasında kullanıyorum ve% 100 çalışıyor. Ama Android Emulator'da aynı kod yürütüldüğünde bir IOException alıyorum.Android Telefonlarda Temel HTTP Kimlik Doğrulaması Rails Server'a

İşte buradaki kod, ve eğer herkes bana niçin IOException'ı niçin takdir ettiğini anlayabilmeme yardımcı olabilir!

private boolean login() 
{ 
    String username, password; 

    DefaultHttpClient client; 
    AuthScope scope; 
    Credentials myCredentials; 
    CredentialsProvider provider; 
    HttpEntity entity; 
    String line; 
    BufferedReader reader; 
    InputStream instream; 

    //Declare & Create the HTTP Client 
    client = new DefaultHttpClient(); 

    //Create our AuthScope 
    scope = new AuthScope("10.19.9.33", 3000); 

    username = "admin" 
      password = "pass" 


    //Set Credentials 
    myCredentials = new UsernamePasswordCredentials(username, password); 

    //Set Provider 
    provider = new BasicCredentialsProvider(); 
    provider.setCredentials(scope, myCredentials); 

    //Set Credentials 
    client.setCredentialsProvider(provider); 

    String url = "http://10.19.9.33:3000/users/show/2"; 

    HttpGet get; 

    //Tell where to get 
    get = new HttpGet(url); 

    HttpResponse response; 

    try 
    { 
     response = client.execute(get); 

     entity = response.getEntity(); 

     /* Check to see if it exists */ 
     if(entity != null) 
     { 
      instream = entity.getContent(); 

      try { 

       reader = new BufferedReader(new InputStreamReader(instream)); 

       line = reader.readLine(); 

       if(line.equals("HTTP Basic: Access denied.")) 
        return false; 

       while (line != null) 
       { 
        // do something useful with the response 
        System.out.println(line); 

        line = reader.readLine(); 
       } 

       return true; 

      } 
      catch (IOException ex) 
      { 

       // In case of an IOException the connection will be released 
       // back to the connection manager automatically 
       throw ex; 

      } 
      catch (RuntimeException ex) 
      { 
       // In case of an unexpected exception you may want to abort 
       // the HTTP request in order to shut down the underlying 
       // connection and release it back to the connection manager. 
       get.abort(); 
       throw ex;    
      } 
      finally 
      { 
       // Closing the input stream will trigger connection release 
       instream.close();    
      } 
     } 
    } 
    catch(ClientProtocolException cp_ex) 
    { 

    } 
    catch(IOException io_ex) 
    { 

    } 

    return false; 
} 
+3

Eğer t ilgili bölümlerini temin Could size yardımcı oluyor İz bırakıyor mu? –

+0

InputStream için API başvurusu şu anlama gelir: Bu özet sınıfı tam olarak çalışan bir uygulama sağlamaz, bu nedenle alt sınıfın olması gerekir ve en azından read() yönteminin geçersiz kılınması gerekir. BufferedInputStream'i deneyin. – techiServices

+0

adrese bağlanma nedeninin, Manifest'e Internet iznini eklemeyi unuttuğumu anladım. Ancak, şimdi cihaz "response = client.execute (get);" hat... –

cevap

2

o Bildiri dosyası Ben görevin bu tür HttpPost kullanıyorum internet

<uses-permission android:name="android.permission.INTERNET"></uses-permission> 
0

Uygulama haklarını vermediğinden IOException oldu tetikleme tuttu ve hiç bir neden herhangi bir sorun:

[...] 
DefaultHttpClient client = new DefaultHttpClient(); 
HttpPost httppost = new HttpPost(LOGIN_SERVLET_URI); 
List<BasicNameValuePair> params = new ArrayList<BasicNameValuePair>(); 
params.add(new BasicNameValuePair("userName", userName)); 
params.add(new BasicNameValuePair("password", password)); 

UrlEncodedFormEntity p_entity = new UrlEncodedFormEntity(params, HTTP.UTF_8); 
httppost.setEntity(p_entity); 
HttpResponse response = client.execute(httppost); 
HttpEntity responseEntity = response.getEntity(); 
[...] 

belki bu

İlgili konular