一个联网小程序,模拟器上可以,在Nokia真机上也可以,但是MOTO真机上却失败,请各位老大帮忙看看,谢谢啦
自己写的一个MIDLET,访问一个servlet获取一段文字显示在屏幕上,在模拟器上运行没有问题,在Nokia真机上也可以,但是换到Moto真机上却失败,现象是这样的:运行后,提示连接网络,确认后等了一会,屏幕顶端出现一个电话的小图标,闪了一下后,程序就退出了。我也试图catch里面抛出来的Exception,但是错误信息也是null。另外Moto的上网连接我也改成cmnet方式了,听说Moto默认的方式是cmwap,是不是改成cmnet也没有用,还有,我在moto的浏览器里访问这个servlet是可以显示信息的,但是在java程序里访问就出现上面的情况。请各位老大帮忙看看,程序如下:
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.io.*;
import java.io.*;
public class HttpMidlet extends MIDlet implements Runnable,CommandListener {
// 使用默认的URL。用户可以从图形用户接口改变这个值
private static String defaultURL = "http://127.0.0.1:8000/test";
// 主MIDP 显示
private Display myDisplay = null;
// 输入URL的图形用户接口组件
private Form requestScreen;
private TextField requestField;
// 用于提交请求的图形用户接口组件
private List list;
private String[] menuItems;
// 用于显示服务器响应的图形用户接口组件
private Form resultScreen;
private StringItem resultField;
// 用于requestScreen的"send"按钮
Command sendCommand;
// 用于requestScreen的"exit"按钮
Command exitCommand;
// 用于requestScreen的"back"按钮
Command backCommand;
public HttpMidlet() {
// 初始化图形用户接口组件
myDisplay = Display.getDisplay(this);
sendCommand = new Command("SEND", Command.OK, 1);
exitCommand = new Command("EXIT", Command.OK, 1);
backCommand = new Command("BACK", Command.OK, 1);
// 显示请求的URL
requestScreen = new Form("Type in a URL:");
requestField = new TextField(null, defaultURL, 100, TextField.URL);
requestScreen.append(requestField);
requestScreen.addCommand(sendCommand);
requestScreen.addCommand(exitCommand);
requestScreen.setCommandListener(this);
// 选择想要的HTTP请求方法
menuItems = new String[] { "GET Request", "POST Request" };
list = new List("Select an HTTP method:", List.IMPLICIT, menuItems,
null);
list.setCommandListener(this);
// 先是从服务器上收到的信息
resultScreen = new Form("Server Response:");
resultScreen.addCommand(backCommand);
resultScreen.setCommandListener(this);
}// 结束HttpMidlet()
public void startApp() {
myDisplay.setCurrent(requestScreen);
}// 结束 startApp()
public void commandAction(Command com, Displayable disp) {
// 当用户点击"send"按钮
if (com == sendCommand) {
myDisplay.setCurrent(list);
} else if (com == backCommand) {
requestField.setString(defaultURL);
myDisplay.setCurrent(requestScreen);
} else if (com == exitCommand) {
destroyApp(true);
notifyDestroyed();
}// 结束 if ( com == sendCommand )
if (disp == list && com == List.SELECT_COMMAND) {
Thread funcTh = new Thread(this);
funcTh.start();
}
// 结束if ( dis == list && com == List.SELECT_COMMAND )
}// 结束 commandAction( Command, Displayable )
private String sendHttpGet(String url)
{
HttpConnection hcon = null;
DataInputStream dis = null;
StringBuffer responseMessage = new StringBuffer();
try {
// 使用READ权限的标准的 HttpConnection
hcon = (HttpConnection) Connector.open(url);
// 从HttpConnection取得一个 DataInputStream
dis = new DataInputStream(hcon.openInputStream());
// 从服务器上取回响应
int ch;
while ((ch = dis.read()) != -1) {
responseMessage.append((char) ch);
}// 结束while ( ( ch = dis.read() ) != -1 )
}
catch (Exception e)
{
e.printStackTrace();
responseMessage.append("ERROR:" +e.getMessage());
} finally {
try {
if (hcon != null)
hcon.close();
if (dis != null)
dis.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}// 结束try/catch
}// 结束try/catch/finally
return responseMessage.toString();
}// 结束sendHttpGet( String )
private String sendHttpPost(String url)
{
HttpConnection hcon = null;
DataInputStream dis = null;
DataOutputStream dos = null;
StringBuffer responseMessage = new StringBuffer();
// 请求体
String requeststring = "This is a POST.";
try {
// 使用读写权限的 HttpConnection
hcon = (HttpConnection) Connector.open(url, Connector.READ_WRITE);
// 设置请求方法为POST
hcon.setRequestMethod(HttpConnection.POST);
// 取得发送请求字符串的DataOutputStream
dos = hcon.openDataOutputStream();
byte[] request_body = requeststring.getBytes();
// 发送请求字符串到服务器
for (int i = 0; i < request_body.length; i++) {
dos.writeByte(request_body[i]);
}// 结束 for( int i = 0; i < request_body.length; i++ )
// 取得做为接收服务器响应的DataInputStream
dis = new DataInputStream(hcon.openInputStream());
// 从服务器上取回响应
int ch;
while ((ch = dis.read()) != -1) {
responseMessage.append((char) ch);
}// 结束while( ( ch = dis.read() ) != -1 ) {
}
catch (Exception e)
{
e.printStackTrace();
responseMessage.append("ERROR");
}
finally {
// 释放输入输出流和HTTP连接
try {
if (hcon != null)
hcon.close();
if (dis != null)
dis.close();
if (dos != null)
dos.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}// 结束try/catch
}// 结束try/catch/finally
return responseMessage.toString();
}// 结束sendHttpPost( String )
public void pauseApp() {
}// 结束pauseApp()
public void destroyApp(boolean unconditional) {
myDisplay = null;
requestScreen = null;
requestField = null;
resultScreen = null;
resultField = null;
}// 结束 destroyApp( boolean )
public void run()
{
String result;
if (list.getSelectedIndex() == 0) // 发送一个 GET 请求到服务器
result = sendHttpGet(requestField.getString());
else
// 发送一个 POST 请求到服务器
result = sendHttpPost(requestField.getString());
resultField = new StringItem(null, result);
resultScreen.append(resultField);
myDisplay.setCurrent(resultScreen);
}
}// 结束HttpMidlet