岁月联盟 · 中国技术网 本站主页 | 安全认证 | 用户服务 | 技术论坛
新闻快报 | 新手学堂 | 黑客特区 | 程序语言 | 数 据 库 | 防 火 墙 | 路由交换 | 系统集成 | 服 务 器 | 存储备份 | 考试认证
Windows | Linux | Java | 协议分析 | 问题解答 | 进程大全 | 网页设计 | 多 媒 体 | 图库资料 | 软件下载 | 站内下载
  您现在的位置: 岁月联盟 >> Java >> J2ME >> 无线开发 >> Java正文
j2me最佳联网方案终结版
作者:未知 文章来源:本站整理 点击数: 更新时间:2007-7-22 22:55:21
        }

    }

 

上一页  [1] [2] [3] [4] [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));

    a

上一页  [1] [2] [3] [4] [5] 下一页


  • 上一个Java:
  • 下一个Java:
  •  
    热门文章
    推荐文章
    关于我们 | 发展历程 | 网站地图 | 广告服务 | 招贤纳士 | 战略合作 | 友情链接 | 著作声明 | 联系我们
    Copyright © 2002-2007 SYUE All rights reserved.
    E_mail:Admin@Syue.Com 皖ICP备05004589号
    未经授权禁止转载、摘编、复制或建立镜像.如有违反,追究法律责任.
    bet365 传世私服 天龙八部私服 热血江湖私服 英雄合击传奇私服 机战私服 惊天动地私服 天龙八部私服 热血江湖私服 bet365 天龙八部私服 bet365 传世私服 传奇世界私服