科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道j2me最佳联网方案终结版

j2me最佳联网方案终结版

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

  (1) .由于无线设备所能支持的网络协议非常有限,仅限于HTTP,Socket,UDP等几种协议,不同的厂家可能还支持其他网络协议,但是,MIDP 1.0规范规定,HTTP协议是必须实现的协议,而其他协议的实现都是可选的。因此。

作者:中国IT实验室 来源:中国IT实验室 2007年9月22日

关键字: 联网 J2ME

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共5页)

    if(!cancel && input.available()>0) // 缓冲区已满,无法继续读取

        listener.onError(601, "Buffer overflow.");

    if(!cancel) {

        if(size!=(-1) && index!=size)

          listener.onError(102, "Content-Length does not match.");

        else

          listener.onFinish(buffer, index);

    }

  }

  catch(IOException ioe) {

    listener.onError(101, "IOException: " + ioe.getMessage());

  }

  finally { // 清理资源

    if(input!=null)

        try { input.close(); } catch(IOException ioe) {}

    if(hc!=null)

        try { hc.close(); } catch(IOException ioe) {}

  }

}

  当下载完毕后,HttpWaitUI就获得了来自服务器的数据,要传递给下一个屏幕处理,HttpWaitUI必须包含对此屏幕的引用并通过一个setData(DataInputStream

input)方法让下一个屏幕能非常方便地读取数据。因此,定义一个DataHandler接口:

public interface DataHandler {

  void setData(DataInputStream input) throws IOException;

}

  HttpWaitUI响应HttpThread的onFinish事件并调用下一个屏幕的setData方法将数据传递给它并显示下一个屏幕:

public void onFinish(byte[] buffer, int size) {

  byte[] data = buffer;

  if(size!=buffer.length) {

    data = new byte[size];

    System.arraycopy(data, 0, buffer, 0, size);

  }

  DataInputStream input = null;

  try {

    input = new DataInputStream(new ByteArrayInputStream(data));

    if(displayable instanceof DataHandler)

        ((DataHandler)displayable).setData(input);

    else

        System.err.println("[WARNING] Displayable object cannot handle data.");

    ControllerMIDlet.replace(displayable);

  }

  catch(IOException ioe) { … }

}

  以下载一则新闻为例,一个完整的HTTP GET请求过程如下:

  首先,用户通过点击某个屏幕的命令希望阅读指定的一则新闻,在commandAction事件中,我们初始化HttpWaitUI和显示数据的NewsUI屏幕:

public void commandAction(Command c, Displayable d) {

  HttpWaitUI wait = new HttpWaitUI("http://192.168.0.1/news.do?id=1", new NewsUI());

  ControllerMIDlet.forward(wait);

}

  NewsUI实现DataHandler接口并负责显示下载的数据:

public class NewsUI extends Form implements DataHandler {

  public void setData(DataInputStream input) throws IOException {

    String title = input.readUTF();

    Date date = new Date(input.readLong());

    String text = input.readUTF();

    append(new StringItem("Title", title));

    append(new StringItem("Date", date.toString()));

    append(text);

  }

}

  服务器端只要以String, long,

String的顺序依次写入DataOutputStream,MIDP客户端就可以通过DataInputStream依次取得相应的数据,完全不需要解析XML之类的文本,非常高效而且方便。

  需要获得联网数据的屏幕只需实现DataHandler接口,并向HttpWaitUI传入一个URL即可复用上述代码,无须关心如何连接网络以及如何处理用户中断连接。

 

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章