在我的应用程序中,我需要从服务器下载多个图像。我使用此代码获取字节数组:
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;
}
网址由后缀“;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),但这会产生另一个问题。
有些图像没有很好地下载,其中一些(每次尝试都不相同)已损坏,但只有当手机使用 wifi 连接来获取这些图像时。
我怎样才能避免这个问题?我必须使用什么方法来获得连接?是否可以检查用户是否有 SIM 卡才能使用 MDS-public?
这是损坏图像的示例:
错误图片 http://nsa30.casimages.com/img/2012/06/28/120628033716123822.png