6

認証が必要なRailsアプリケーションサーバーに接続しようとしています。私はデスクトップアプリケーションでJakarta HTTP Client for Javaを使用しています。これは100%動作します。しかし、Androidエミュレータで全く同じコードが実行されると、IOExceptionが発生します。Android携帯電話からRailsサーバーへの基本的なHTTP認証

ここにコードがあります。なぜ誰かが私がIOExceptionをスローする理由を理解できたら助かります。

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

アウトできますが、あなたはトンの関連部分を提供することができ彼はスタックトレース? –

+0

InputStreamのAPIリファレンス: この抽象クラスは完全に機能する実装を提供しないため、サブクラス化する必要があり、少なくともread()メソッドをオーバーライドする必要があります。 BufferedInputStreamを試してください。 – techiServices

+0

私は、アドレスに接続していなかった理由は、インターネット許可をマニフェストに追加するのを忘れていたことです。しかし、今ではデバイスが "response = client.execute(get);"でハングしているようですライン... –

答えて

2

それはマニフェストファイルは、私はタスクのこの種のHttpPostを使用しているインターネット

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

へのアプリケーションの権限を与えていなかったためにIOExceptionがしたトリガ保管、およびあったことがない理由どんな問題:

[...] 
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(); 
[...] 

多分これはあなたが