二、J2ME简单的行情软件--得到数据(解析xml)

来源:互联网 发布:mega软件下载 编辑:程序博客网 时间:2024/06/10 04:35

在J2ME中得到数据

我的项目主要是通过PHP连接ICE得到行情数据并将其转换为XML类型的数据,然后在J2ME中解析XML。

在J2ME中我主要用KXML来解析,主要用到KXML中的KXmlParser.java、XmlPullParser.java、XmlPullParserException.java这三哥类,我自己感觉还是比较简单,J2ME中主要是通过HttpConnection来打开一个连接地址得到数据:

我这里主要写了两个方法来得到数据:

 

/**
  * 主用用来得到数据并设置一些参数
  * @param url         得到数据的URL地址
  */

public static Vector getVectorData(String url){
  InputStream is = null;
  try {

  //实例化HttpConnection类
   mHttpConnection=(HttpConnection) Connector.open(url);

  //设置请求的方法、得到数据的类型
   mHttpConnection.setRequestMethod(HttpConnection.GET);
   mHttpConnection.setRequestProperty("Content-Type", "application/xml");
   mHttpConnection.setRequestProperty("User-Agent", "Profile/MIDP-2.0 Configuration/CLDC-1.1");
   mHttpConnection.setRequestProperty("Content-Language", "en-US");

  //得到响应的状态
   int rc=mHttpConnection.getResponseCode();
   if(rc!=HttpConnection.HTTP_OK){
    mHttpConnection.close();
   }

  //得到数据流
   is=mHttpConnection.openInputStream();
   return Util.getData(is);
  } catch (IOException e) {
   e.printStackTrace();
  }
  return null;
 }

 

 

/**
  * 主要用来解析数据流,将其转换为Vector
  * @param is  数据流
  * @return   返回一个包含了时间,栏目信息列表的一个数组
  */
 public static Vector getData(InputStream is) {
  KXmlParser parser = new KXmlParser();
  try {

   //下面主要是对数据流的操作,并且将它转换为utf-8的编码
   byte[] b = new byte[1024];
   int len = 0;
   ByteArrayOutputStream baos = new ByteArrayOutputStream();
   DataOutputStream dos = new DataOutputStream(baos);
   while ((len = is.read(b)) != -1) {
    dos.write(b, 0, len);
   }
   byte[] data = baos.toByteArray();
   String strxml = new String(data, "utf-8");
   if(strxml.length()>0){

    // 必须让xml也"<?"开头
    strxml = strxml.substring(strxml.indexOf("<?", 0), strxml.length()).trim();
    ByteArrayInputStream bin = new ByteArrayInputStream(strxml.getBytes("UTF-8"));
    parser.setInput(bin, "UTF-8");

    //主要用来判断是否为xml的开头,结尾,标签的开头和结尾
    int eventType = parser.getEventType();
    while (eventType != XmlPullParser.END_DOCUMENT) {
     switch (eventType) {

       //标签开头
      case XmlPullParser.START_TAG:

        //得到标签的名称
       strtag = parser.getName();

      if ("fopen".equals(strtag)) {

          //得到xml的数据
          myData.setFopen(parser.nextText());
       }
       break;

      //在xml中是标签结尾
      case XmlPullParser.END_TAG:

         strtag = parser.getName();
       break;
     }

      //主要用来判断是否为xml的开头,结尾,标签的开头和结尾

     eventType = parser.next();
    }
    return vector;
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
  return null;
 }

 

 

原创粉丝点击