首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用kxml.zip解析Android XML代码

使用kxml.zip解析Android XML代码
EN

Stack Overflow用户
提问于 2012-08-29 18:03:47
回答 1查看 240关注 0票数 0

我使用这段代码来解析一个xml文件,我有一个url地址,但它给了我错误的android os network on main thread exception in this句子URLConnection httpConnection = url.openConnection();inputStream = httpConnection.getInputStream();这是我的代码:

代码语言:javascript
复制
package com.example.mainp;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.Vector;

import org.apache.http.HttpConnection;
import org.kxml.Xml;
import org.kxml.parser.XmlParser;
import org.kxml.parser.ParseEvent;
import org.kxml.parser.XmlParser;

import android.app.Activity;
import android.widget.Toast;






public class parse {

     public static Vector places;
     Activity ac;
    Place place;
      private ParseEvent event = null;
    public void init(Activity activity) {
        this.ac=activity;
        XmlParser parser = null;
        InputStreamReader isR = null;
        HttpConnection connection = null;
        try {

            InputStream inputStream = null;
            System.out.println("0");
            Toast.makeText(ac, "24", Toast.LENGTH_LONG).show();
            //URL url = new URL("http://217.52.114.3/Mobinil%20Islamic%20WebService/MobinilIslamicService.asmx/GetIslamicDirectory");
            URL url= new URL("http://217.52.114.3/CinemaGuid/CinemaGuid.asmx/getTVSchedule");
            System.err.println("2");
            URLConnection httpConnection = url.openConnection();
            inputStream = httpConnection.getInputStream();
//          inputStream = connection.openInputStream();
            Toast.makeText(ac, "4", Toast.LENGTH_LONG).show();  
            isR = new InputStreamReader(inputStream, "UTF-8");
            System.out.println("3");
            parser = new XmlParser(isR);
            System.out.println("4");
            Toast.makeText(activity, "5", Toast.LENGTH_LONG).show();    
            places = new Vector<Place>();
            traverse(parser);
            isR.close();
            inputStream.close();
            inputStream = null;
            isR = null;
            // System.gc();
        } catch (Exception ex) {
            Toast.makeText(activity, ex.toString(), Toast.LENGTH_LONG).show();  
        }
    }
    private void traverse(XmlParser parser) {
        // TODO Auto-generated method stub
        boolean leave = false;
        do {
            try {
                event = parser.read();
                ParseEvent pe;
                switch (event.getType()) {
                    case Xml.START_TAG:
                        // see API doc of StartTag for more access methods
                        // Pick up Title for display
                        if("places".equalsIgnoreCase(event.getName())){
                            places = new Vector();
                            //Toast.makeText(ac, "6", Toast.LENGTH_LONG).show();    
                        }
                        if("places".equalsIgnoreCase(event.getName())){
                            place = new Place();
                            place.setName(event.getValue("name"));
                            place.seturl(event.getValue("url"));
                            place.setaddress(event.getValue("adress"));
                            //Toast.makeText(MainPActivity.this, "7", Toast.LENGTH_LONG).show();    

                        }
                        if("description".equalsIgnoreCase(event.getName())){
                             pe = parser.read();
                            if(pe.getText()!=null){
                                place.setdescription(pe.getText().toString());
                            }
                        }
                        traverse(parser); // recursion call for each <tag></tag>
                        break;
                    case Xml.END_TAG:
                        if ("Place".equalsIgnoreCase(event.getName())) {
                            places.addElement(place);
                         // Toast.makeText(MainPActivity.this, "8", Toast.LENGTH_LONG).show();  
                        }
                        leave = true;
                        break;
                    case Xml.END_DOCUMENT:
                        leave = true;
                        break;
                    case Xml.TEXT:
                        break;
                    case Xml.WHITESPACE:
                        break;
                    default:
                }
            } catch (Exception ex) {
                Toast.makeText(ac, ex.getMessage(), Toast.LENGTH_LONG).show();  

            }
        } while (!leave);

    }
}
EN

回答 1

Stack Overflow用户

发布于 2012-08-29 18:24:26

任何网络调用都应该在单独的线程中完成。你在UI (默认)主线程中进行网络调用,Android 4.0+抛出了一个异常。查看AsyncTask或工作线程,让长时间运行的任务在另一个进程中完成

http://developer.android.com/guide/components/processes-and-threads.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12175445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档