ブラックベリーアプリケーションでデータを取得する際に問題に直面しています.以下のコードは、xml形式のサーバーからデータを取得するために使用し、このデータを解析してユーザーに表示します.wi-fiでは正常に動作しますが、実行するとEDGEまたはGPRSを使用する実際のデバイスでは、動作が非常に遅く、多くの場合、入力ストリームがnullになります.なぜこれが遅いネットワークで発生しているのか、Wi-Fiでは発生していないのかわかりません.
public InputStream getInputStream(String url)
{
HttpConnection httpConnection = null;
try
{
httpConnection = getConnectionForRequest(url);
final int iResponseCode = httpConnection.getResponseCode();
if(iResponseCode == HttpConnection.HTTP_OK)
{
return httpConnection.openInputStream();
}
else
return null;
}
catch (Exception e)
{
return null;
}
finally
{
if(httpConnection!=null)
{
httpConnection.close();
}
}
}
public HttpConnection getConnectionForRequest(String url)
{
int[] availableTransportTypes = {TransportInfo.TRANSPORT_TCP_WIFI,
TransportInfo.TRANSPORT_BIS_B,
TransportInfo.TRANSPORT_WAP2,
TransportInfo.TRANSPORT_TCP_CELLULAR,
TransportInfo.TRANSPORT_MDS,
TransportInfo.TRANSPORT_WAP};
final ConnectionFactory connectionFactory = new ConnectionFactory();
for (int i = 0; i < availableTransportTypes.length; i++)
{
int transport = availableTransportTypes[i];
if (!TransportInfo.isTransportTypeAvailable(transport) || !TransportInfo.hasSufficientCoverage(transport))
{
Arrays.removeAt(availableTransportTypes, i);
}
}
connectionFactory.setPreferredTransportTypes(availableTransportTypes);
connectionFactory.setAttemptsLimit(50);
connectionFactory.setConnectionTimeout(3000);
connectionFactory.setTimeLimit(20000);
final ConnectionDescriptor connectionDescriptor = connectionFactory.getConnection(url);
HttpConnection connection = null;
if (connectionDescriptor != null)
{
connection = (HttpConnection) connectionDescriptor.getConnection();
}
return connection;
}
public boolean parseData()
{
InputStream is = getInputStream("http://data.****.com/getData.aspx");
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder;
Document doc;
try
{
docBuilder = docBuilderFactory.newDocumentBuilder();
doc = docBuilder.parse(is);
is.close();
doc.getDocumentElement().normalize();
docBuilder.isValidating();
}
catch(Exception ex)
{
return false;
}
return true;
}