Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Blackberry Http连接在图像下载时超时。为什么?_Java_Blackberry_Device_Ioexception - Fatal编程技术网

Java Blackberry Http连接在图像下载时超时。为什么?

Java Blackberry Http连接在图像下载时超时。为什么?,java,blackberry,device,ioexception,Java,Blackberry,Device,Ioexception,我的应用程序在大约200个URL中循环,这些URL都是jpg图像。 在模拟器中,它读取ok,然后将字节数组毫无问题地存储在persistentStore中。 在设备上,它给出java.io.IOException:TCP读取基本上在每个图像上都超时。 时不时有人能通过。甚至不知道怎么做。图像大小也无法提供洞察力。有些是6k,有些是11k。大小似乎与超时无关。 我将尝试发布我认为相关的代码,但我不是这里的专家,所以如果我遗漏了什么,请说出来。 通过循环和连接线程调用http连接: for(in

我的应用程序在大约200个URL中循环,这些URL都是jpg图像。 在模拟器中,它读取ok,然后将字节数组毫无问题地存储在persistentStore中。 在设备上,它给出java.io.IOException:TCP读取基本上在每个图像上都超时。 时不时有人能通过。甚至不知道怎么做。图像大小也无法提供洞察力。有些是6k,有些是11k。大小似乎与超时无关。

我将尝试发布我认为相关的代码,但我不是这里的专家,所以如果我遗漏了什么,请说出来。

通过循环和连接线程调用http连接:

for(int i = 0; i < images.size(); i ++)
  {
      try {
       String url = images.elementAt(i).toString();
                HttpRequest data3 = new HttpRequest(url, "GET", false);
          data3.start();

    data3.join();

   } catch (IOException e) {
    Dialog.inform("wtf " + e);
   }
  }
最后,读取流并将字节写入字节数组:

else if(contentType.equals("image/png") || contentType.equals("image/jpeg") || contentType.equals("image/gif"))
  {
   try
            {
    if((int) length < 1)
     length = 15000;

             byte[] responseData = new byte[(int) length];
                int offset = 0;
                int numRead = 0;
                StringBuffer rawResponse = new StringBuffer();

                int chunk = responseData.length-offset;
                if(chunk < 1)
                 chunk = 1024;

                while (offset < length && (numRead=result.read(responseData, offset, chunk)) >= 0){
                 rawResponse.append(new String(responseData, offset, numRead));
                 offset += numRead;
                }

                String resultString = rawResponse.toString();
                byte[] dataArray = resultString.getBytes(); 

                result.close();

                database db = new database();
                db.storeImage(venue_id, dataArray);
            }
            catch( Exception e )
            {
             System.out.println(">>>>>>>----------------> total image fail: " + e);   
            }


  }
else if(contentType.equals(“image/png”)| | contentType.equals(“image/jpeg”)| | contentType.equals(“image/gif”))
{
尝试
{
如果((int)长度小于1)
长度=15000;
字节[]响应数据=新字节[(int)长度];
整数偏移=0;
int numRead=0;
StringBuffer rawResponse=新的StringBuffer();
int chunk=responseData.length-offset;
if(块<1)
区块=1024;
而(偏移量=0){
append(新字符串(responseData、offset、numRead));
偏移量+=numRead;
}
字符串resultString=rawResponse.toString();
byte[]dataArray=resultString.getBytes();
result.close();
数据库db=新数据库();
db.storeImage(场馆标识、数据阵列);
}
捕获(例外e)
{
System.out.println(“>>>>>-->total image fail:”+e);
}
}
需要考虑的事项:
在模拟器中,长度始终是字节长度。在设备中,它始终为-1。
chunk变量是一个测试,看看我是否强制一个15k字节的数组,它是否会像预期的那样读取,因为字节[-1]给出了一个越界异常。结果是一样的。有时它会写。大部分时间都超时了。


非常感谢您的帮助。

您可以使用参数“ConnectionTimeout”调整Blackberry上TCP超时的长度

在您的代码中:

HttpConnection connection = (HttpConnection)Connector.open(url + updateConnectionSuffix());
您需要附加ConnectionTimeout。您可以将其写入updateConnectionSuffix()中,也可以将其追加

    HttpConnection connection = (HttpConnection)Connector.open(url + updateConnectionSuffix() + ";ConnectionTimeout=54321");
这将超时设置为54321毫秒

当客户端等待服务器发送ack,但在指定的时间内没有收到ack时,会发生超时


编辑:还有,你能使用浏览器吗?您可能还想使用deviceside参数。

您可以使用参数“ConnectionTimeout”调整Blackberry上TCP超时的长度

在您的代码中:

HttpConnection connection = (HttpConnection)Connector.open(url + updateConnectionSuffix());
您需要附加ConnectionTimeout。您可以将其写入updateConnectionSuffix()中,也可以将其追加

    HttpConnection connection = (HttpConnection)Connector.open(url + updateConnectionSuffix() + ";ConnectionTimeout=54321");
这将超时设置为54321毫秒

当客户端等待服务器发送ack,但在指定的时间内没有收到ack时,会发生超时


编辑:还有,你能使用浏览器吗?您可能还想使用deviceside参数。

我认为问题可能是您在从输入流读取字节之前关闭了连接。请尝试在读取字节后移动连接。close()。

我认为问题可能是您在从输入流读取字节之前关闭了连接。请尝试移动连接。请在读取字节后关闭()。

谢谢!我应用了这两种解决方案,该应用程序正在下载和存储图像,正如预期的那样。如果我有时间进行进一步的调试,我可以精确地指出是哪一个解决了这个问题,并将其归功于最能解决这个问题的那个,这样未来的程序员就可以从中准确地受益;谢谢你!我应用了这两种解决方案,该应用程序正在下载和存储图像,正如预期的那样。如果我有时间进行进一步的调试,我可以精确地指出是哪一个解决了这个问题,并将其归功于最能解决这个问题的那个,这样未来的程序员就可以从中准确地受益;D