私のアプリでは、サーバーからいくつかの画像をダウンロードする必要があります。このコードを使用して、バイト配列を取得します。
HttpConnection connection = null;
InputStream inputStream = null;
byte[] data = null;
try
{
//connection = (HttpConnection)Connector.open(url);
connection = (HttpConnection)Connector.open(url, Connector.READ_WRITE, true);
int responseCode = connection.getResponseCode();
if(responseCode == HttpConnection.HTTP_OK)
{
inputStream = connection.openInputStream();
data = IOUtilities.streamToBytes(inputStream);
inputStream.close();
}
connection.close();
return data;
}
catch(IOException e)
{
return null;
}
URL はサフィックス「;deviceSide=false;ConnectionType=MDS - public」(スペースなし) で形成されており、完全に機能しています。
問題は、SIM カードを持たない電話では、MDS サーバー経由でインターネットに接続できないことです。そこで、コネクション ファクトリを使用するように変更し、BB が必要なものを選択できるようにしました。
ConnectionFactory connFact = new ConnectionFactory();
ConnectionDescriptor connDesc;
connDesc = connFact.getConnection(url);
if (connDesc != null)
{
final HttpConnection httpConn;
httpConn = (HttpConnection)connDesc.getConnection();
try
{
httpConn.setRequestMethod(HttpConnection.GET);
final int iResponseCode = httpConn.getResponseCode();
if(iResponseCode == HttpConnection.HTTP_OK)
{
InputStream inputStream = null;
try{
inputStream = httpConn.openInputStream();
byte[] data = IOUtilities.streamToBytes(inputStream);
return data;
}
catch(Exception e)
{
e.printStackTrace();
return null;
}
finally{
try
{
inputStream.close();
} catch (IOException e)
{
e.printStackTrace();
return null;
}
}
}
}
catch (IOException e)
{
System.err.println("Caught IOException: " + e.getMessage());
}
}
return null;
適切なプレフィックス (この場合は interface=wifi) が選択されるため、接続は機能しますが、これにより別の問題が生じます。
一部の画像はうまくダウンロードされず、一部の画像 (試行ごとに同じではありません) が破損していますが、これは電話が Wi-Fi 接続を使用してこれらの画像を取得した場合に限られます。
この問題を回避するにはどうすればよいですか? 接続を取得するにはどのような方法を使用する必要がありますか? ユーザーが MDS-public を使用するために SIM カードを持っているかどうかを確認することはできますか?
破損したイメージの例を次に示します。
エラー画像 http://nsa30.casimages.com/img/2012/06/28/120628033716123822.png