Соединение закрыто. При попытке отправить более 1,5 КБ данных в формате URL на 8900 и, возможно, других - PullRequest
0 голосов
/ 08 сентября 2010

В симуляторе все это работает.

Я использую Wi-Fi на устройстве, так как предполагаю, что он самый стабильный.

Проблема возникает, когда я пытаюсь опубликовать большечем 1.5K данных в кодировке urlen.

Если я отправляю меньше, это нормально.

Кажется, что зависает команда .flush ();

Работает на физическом 9700, поэтому я предполагаю, что это, возможно, зависит от устройства

В приведенном ниже примере я использую переменные формы, но я также попытался опубликовать тип контента json, но все еще имел ту же проблему

Я написал небольшой тестапп и использую основной поток, так что я знаю, что потоки не запутываются

Если у кого-то есть какие-нибудь идеи, которые были бы хороши.

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 голосов
/ 09 сентября 2010

Вместо потоков данных вы должны просто использовать обычные потоки ввода и вывода.Поэтому вместо hc.openDataOutputStream () используйте hc.openOutputStream ().Потоки данных предназначены для сериализации объектов Java в поток, но вы просто хотите записать необработанные байты в поток - так что вам нужен обычный выходной поток.То же самое для чтения ответа - просто используйте inputtream, возвращаемый hc.openInputStream ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...