認証が必要な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;
}
アウトできますが、あなたはトンの関連部分を提供することができ彼はスタックトレース? –
InputStreamのAPIリファレンス: この抽象クラスは完全に機能する実装を提供しないため、サブクラス化する必要があり、少なくともread()メソッドをオーバーライドする必要があります。 BufferedInputStreamを試してください。 – techiServices
私は、アドレスに接続していなかった理由は、インターネット許可をマニフェストに追加するのを忘れていたことです。しかし、今ではデバイスが "response = client.execute(get);"でハングしているようですライン... –