从模拟器中,这一切都有效。
我在设备上使用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;
}
答案 0 :(得分:0)
您应该只使用常规输入和输出流,而不是数据流。因此,使用hc.openOutputStream()代替hc.openDataOutputStream()。数据流用于将Java对象序列化为流,但您只想将原始字节写入流 - 因此您需要常规输出流。读取响应也是一样 - 只需使用hc.openInputStream()
返回的输入流