J2ME访问Web服务器问题

guo2478858 2009-03-25 04:44:35
本人初学者,呵呵,所以希望高手解答的时候最好附代码。
我现在遇到一个问题,我通过HttpConnection hc = (HttpConnection)Connector.open(url);访问一个Web服务器地址,一定要用线程吗?我就这一个操作,所以不想用线程,具体代码该怎么写呢?

而且我现在用线程的话,对于在线程里取到的值想在线程之外的地方用,即使定义了一个全局变量也取不到,所以请给出相应代码。

我将我现在的代码简化下发下:
package moa;

import java.io.DataInputStream;

import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class MIDlet_Index extends MIDlet implements CommandListener{
private Display dis;
public String ReturnS = new String();
private Form frm = new Form("访问地址");
private Command cmdOK = new Command("确定",Command.SCREEN,1);

public MIDlet_Index() {
}

protected void startApp() throws MIDletStateChangeException {
dis = Display.getDisplay(this);
dis.setCurrent(frm);
frm.addCommand(cmdOK);
}

public void commandAction(Command c,Displayable d){
if(c==cmdOK){
ValidateThread vt = new ValidateThread();
vt.start();
System.out.print(ReturnS);//这里就无法打印出来ReturnS,怎么能获得值?
}
}

class ValidateThread extends Thread{
public void run(){
try{
String url = "http://192.168.255.56/MOA.nsf/Agent_MOA_Login";
HttpConnection hc = (HttpConnection)Connector.open(url);
DataInputStream dis = hc.openDataInputStream();
byte[] b = new byte[(int)hc.getLength()];
dis.read(b);
ReturnS = new String(b).trim();//这里是我获得的值,在上面想用
}catch(Exception ex){
ex.printStackTrace();
}
}
}

protected void destroyApp(boolean arg0) throws MIDletStateChangeException {

}

protected void pauseApp() {

}
}
...全文
85 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
bu6030 2009-10-05
  • 打赏
  • 举报
回复
学习学习哈!
zhaoyb0319 2009-03-25
  • 打赏
  • 举报
回复
亚日都讲这么详细了,,不会还不中吧??
还有啊,,LZ啊,不开线程行啊
你想不成功,那就别开喽,,死锁在那里,就重启
再死,再重启喽!!
kf156 2009-03-25
  • 打赏
  • 举报
回复
不论你做几件事,在commandAction 中访问网络最好都开线程
改后的代码如下:


import java.io.DataInputStream;

import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.StringItem;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class MIDlet_Index extends MIDlet implements CommandListener {
private Display dis;

public String ReturnS = new String();

private Form frm = new Form("访问地址");

private Command cmdOK = new Command("确定", Command.SCREEN, 1);

private Form form = new Form("等待结果");

private StringItem si = new StringItem(null, "");

public MIDlet_Index() {
}

protected void startApp() throws MIDletStateChangeException {
dis = Display.getDisplay(this);
dis.setCurrent(frm);
frm.addCommand(cmdOK);
frm.setCommandListener(this);//命令监听漏了
}

public void commandAction(Command c, Displayable d) {
if (c == cmdOK) {
ValidateThread vt = new ValidateThread();
vt.start();

// 先切换到另一界面,好看效果
dis.setCurrent(form);
form.append(si);
setText();// 赋值,线程有可能还没运行完,所以这值可能为空
}
}

private void setText() {
System.out.println("ReturnS=" + ReturnS);// 输出看看 注意两次输出
si.setText(ReturnS);
}

class ValidateThread extends Thread {
public void run() {
try {
String url = "http://192.168.255.56/MOA.nsf/Agent_MOA_Login";
HttpConnection hc = (HttpConnection) Connector.open(url);
DataInputStream dis = hc.openDataInputStream();
byte[] b = new byte[(int) hc.getLength()];
dis.read(b);
ReturnS = new String(b).trim();// 此刻获得到值了

setText();// 已经有值了,再次赋值

} catch (Exception ex) {
ex.printStackTrace();
}
}
}

protected void destroyApp(boolean arg0) throws MIDletStateChangeException {

}

protected void pauseApp() {

}
}
vinivainy 2009-03-25
  • 打赏
  • 举报
回复
ValidateThread 里面加一个变量来保存值啊,不用线程也可以的,就把你的run方法换成普通方法,
DataInputStream dis = hc.openDataInputStream(); 这一句就是获得服务器端的值啊。
我说的仅供参考!
guo2478858 2009-03-25
  • 打赏
  • 举报
回复
顶到前面去,顶到高手出现,呵呵。

13,100

社区成员

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

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