为什么我的HTTP下载在模拟器上运行成功,但是在手机上就失败呢???

HashCodeWithJava 2004-05-05 04:24:23
我测试的机器是Nokia 40的手机,然后下在自己网站上的一个名字叫做1.dat的文件.

这是我HTTP下载部分的代码

// 创建HTTP连接
c = (HttpConnection) Connector.open(DOWN_URL + ResourceNumber + ".dat",
Connector.READ_WRITE);
System.out.println(DOWN_URL + ResourceNumber + ".dat");
c.setRequestMethod(HttpConnection.GET);
c.setRequestProperty("IF-Modified-Since", "29 Dec 2001 15:17:19 GMT");
c.setRequestProperty("User-Agent",
"Profile/MIDP-1.0 Configuration/CLDC-1.0");
c.setRequestProperty("Accept",
"text/html, text/plain, text/xml, image/png, */*"); //设置可接受的MIME类型
c.setRequestProperty("Content-Language", "en-CA");
c.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
c.setRequestProperty("Connection","Keep-Alive");
is = c.openDataInputStream();
int dataLength = (int) c.getLength();
然后在手机上测试发笑获取的dataLength居然为-1.
而在模拟器上运行,一点问题都没有啊!


请问大家这是怎么回事的?还有解决办法是怎么样?

...全文
212 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
HashCodeWithJava 2004-06-28
  • 打赏
  • 举报
回复
呵呵,谢谢各位老大.
我的程序终于可以下载了.
wsixu 2004-06-28
  • 打赏
  • 举报
回复
如果我有个自己定义的文件类型放在网上,难道我得自己把它改成*.html的扩展名才能下载?

不需要的!可以设置下载的都是字节流,和后缀关系不大。


模拟器上可以下载说明程序问题不大,真机不能下载,原因有很多:你的手机网络连接正常吗?你怎么保证你的手机上网是正常的?你用的url中有中文吗?不要告诉我你自己的网站是个localhost的啊!如果手机和网络连接是正常的,就看看你的手机支持的java的说明吧,看看有没有什么特别的要求;还是没有找到答案,呵呵,不要骂我,我也没有办法了!那就是虚拟机也没有读到内容,你被虚拟机骗了。
dryr 2004-06-25
  • 打赏
  • 举报
回复
没有开通的话当然是不能通过网络跟服务器通讯的罗
dryr 2004-06-25
  • 打赏
  • 举报
回复
你的手机有没有开通手机上网业务呢?
HashCodeWithJava 2004-06-25
  • 打赏
  • 举报
回复
当然开通了的
HashCodeWithJava 2004-06-24
  • 打赏
  • 举报
回复
再up一下嘛
HashCodeWithJava 2004-05-14
  • 打赏
  • 举报
回复
Up
HashCodeWithJava 2004-05-11
  • 打赏
  • 举报
回复
那么我应该怎么设置上网的方式?
谢谢!
gliet_ivan 2004-05-09
  • 打赏
  • 举报
回复
你的手记上网方式没有设对。
HashCodeWithJava 2004-05-08
  • 打赏
  • 举报
回复
如果我有个自己定义的文件类型放在网上,难道我得自己把它改成*.html的扩展名才能下载?

还有text/xml或text/wml是什么类型的文件?
mingjava 2004-05-08
  • 打赏
  • 举报
回复
getLength()并不一定是有效的 所以你有必要判断 如果这个返回值大于0那么你就可以大批的接受数据,如果不是的话 那么你应该用别的方法。sun给的代码例子是这样的。供你参考
void getViaHttpConnection(String url) throws IOException {
HttpConnection c = null;
InputStream is = null;
int rc;

try {
c = (HttpConnection)Connector.open(url);

// Getting the response code will open the connection,
// send the request, and read the HTTP response headers.
// The headers are stored until requested.
rc = c.getResponseCode();
if (rc != HttpConnection.HTTP_OK) {
throw new IOException("HTTP response code: " + rc);
}

is = c.openInputStream();

// Get the ContentType
String type = c.getType();

// Get the length and process the data
int len = (int)c.getLength();
if (len > 0) {
int actual = 0;
int bytesread = 0 ;
byte[] data = new byte[len];
while ((bytesread != len) && (actual != -1)) {
actual = is.read(data, bytesread, len - bytesread);
bytesread += actual;
}
} else {
int ch;
while ((ch = is.read()) != -1) {
...
}
}
} catch (ClassCastException e) {
throw new IllegalArgumentException("Not an HTTP URL");
} finally {
if (is != null)
is.close();
if (c != null)
c.close();
}
}
weekeed 2004-05-08
  • 打赏
  • 举报
回复
text/html, text/plain, text/xml, image/png是可接受的文件类型,在真机上不支持html而在模拟器上就行,你可以试一试text/xml或text/wml。
wilsonsun 2004-05-07
  • 打赏
  • 举报
回复
你这代码是在向服务器发请求吧,怎么没有写字节流呢?
HashCodeWithJava 2004-05-07
  • 打赏
  • 举报
回复
大家都来看看,给点意见也好啊
HashCodeWithJava 2004-05-07
  • 打赏
  • 举报
回复
是啊.
怎么写字节流?
is = c.openDataInputStream();不是吗?
HashCodeWithJava 2004-05-06
  • 打赏
  • 举报
回复
真的URL没有问题的.
我用模拟器测试都可以的.

请问一下text/html, text/plain, text/xml, image/png这些属性是什么意思?
它和我要下载的文件的扩展名有什么关系?

我可不可以任意下载一个任意扩展名的文件?
ziyang 2004-05-06
  • 打赏
  • 举报
回复
应该是你在真机上的连接有问题。
首先确定你在真机和模拟器上的URL指向没问题。
其二把那些输出结果贴出来
minghuitian 2004-05-06
  • 打赏
  • 举报
回复
up

13,100

社区成员

发帖
与我相关
我的任务
社区描述
Java J2ME
社区管理员
  • J2ME社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧