连接已关闭当尝试在8900上发布超过1.5K的url编码数据时,可能还有其他人

时间:2010-09-08 17:51:51

标签: blackberry

从模拟器中,这一切都有效。

我在设备上使用wifi,因为我认为它是最稳定的。

当我尝试发布超过1.5K的urlencoded数据时会出现问题。

如果我少送,那就没关系。

似乎挂起了.flush命令();

它适用于物理9700,因此我认为它可能是设备特定的

在下面的示例中,我使用的是表单变量,但我也尝试过发布内容类型json,但仍然存在同样的问题

我写了一个小的testapp,并使用主线程,所以我知道这不是线程混淆

如果有人有任何想法会很棒。

private String PostEventsTest()
 {
  String returnValue = "Error";
  HttpConnection hc = null;
  DataInputStream dis = null;
  DataOutputStream dos = null;
  StringBuffer messagebuffer = new StringBuffer();
  URLEncodedPostData postValuePairs;
  try
  {

   postValuePairs = new URLEncodedPostData(null, false);
   postValuePairs.append("DATA",postData);// postData);
   hc = (HttpConnection) Connector.open(postURL, Connector.READ_WRITE);
   hc.setRequestMethod(HttpConnection.POST);
   hc.setRequestProperty("User-Agent", "BlackBerry");
   hc.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
   hc.setRequestProperty("Content-Length", Integer.toString(postValuePairs.getBytes().length));
   //hc.setRequestProperty("Content-Length", Integer.toString(postData.length()));



   dos = hc.openDataOutputStream();
   dos.write(postValuePairs.getBytes());
   dos.flush();
   dos.close();
   // Retrieve the response back from the servlet
   dis = new DataInputStream(hc.openInputStream());
   int ch;
   // Check the Content-Length first
   long len = hc.getLength();
   if (len != -1)
   {
    for (int i = 0; i < len; i++)

     if ((ch = dis.read()) != -1)
      messagebuffer.append((char) ch);
   }
   else
   { // if the content-length is not available
    while ((ch = dis.read()) != -1)
     messagebuffer.append((char) ch);
   }
   dis.close();
   returnValue = "Yahoo";
  }
  catch (Exception ex)
  {
   returnValue = ex.toString();
   ex.printStackTrace();
  }

  return returnValue;

 }

1 个答案:

答案 0 :(得分:0)

您应该只使用常规输入和输出流,而不是数据流。因此,使用hc.openOutputStream()代替hc.openDataOutputStream()。数据流用于将Java对象序列化为流,但您只想将原始字节写入流 - 因此您需要常规输出流。读取响应也是一样 - 只需使用hc.openInputStream()

返回的输入流