网络获取信息Ion---解析xml和assets获取信息pull解析xml

本文介绍如何利用Ion库在Android应用中加载网络XML数据,并通过解析这些数据来展示新闻列表。具体步骤包括配置网络权限、加载指定URL的XML内容、使用XmlPullParser解析节点等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

两个包androidasync-2.1.6.jar-------ion-2.1.6.jar

配置--android.permission.INTERNET


Mainactivity

获取网络信息

String ulr = "http://www.oschina.net/action/api/news_list?catalog=1&pageIndex="+ pageIndex + "&pageSize=20";
        Ion.with(getApplicationContext()).load(ulr).asString()
                .setCallback(new FutureCallback<String>() {
                        //result就是解析
                    @Override
                    public void onCompleted(Exception e, String result) {
                        // TODO Auto-generated method stub

                        if (e != null) {

                            return;
                        }

                        pull(result);
                        allList.addAll(nList);
                        adapter.addrest(allList);

                    }
                });

pull解析xml

private void pull_(String result) {
        // TODO Auto-generated method stub
        News infos=null;
        try {
        
         //获得xml解析器
        XmlPullParser newPullParser = Xml.newPullParser();
        //获得文件
        ByteArrayInputStream arrayInputStream=new ByteArrayInputStream(result.getBytes());
        //设置流
        
            newPullParser.setInput(arrayInputStream,"UTF-8");
            
            eventType = newPullParser.getEventType();
        
        while(eventType!=XmlPullParser.END_DOCUMENT){
            String name = newPullParser.getName();

            
            switch (eventType) {
            case XmlPullParser.START_DOCUMENT:
                list_news = new ArrayList<News>();
                break;
            case XmlPullParser.START_TAG:
            
                    if("news".equals(name)){
                        infos = new News();
                        
                    }
                    if(infos!=null){
                        
                        if("id".equals(name)){
                            infos.id = newPullParser.nextText();
                            
                        }else if("title".equals(name)){
                        
                            String titles = newPullParser.nextText();
                            infos.title=titles;
                        }else if ("body".equals(name)) {

                            String body = newPullParser.nextText();
                            infos.body =body;
                            
                        } else if ("commentCount".equals(name)) {
                            String commentCount = newPullParser.nextText();
                            infos.commentCount =commentCount;
                        } else if ("author".equals(name)) {
                            String author = newPullParser.nextText();
                            infos.author =author;
                        } else if ("authorid".equals(name)) {
                            String authorid = newPullParser.nextText();
                            infos.authorid =authorid;
                        } else if ("pubDate".equals(name)) {
                            String pubDate = newPullParser.nextText();
                            infos.pubDate =pubDate;
                        } else if("newstype".equals(name)){
                            if("type".equals(name)){
                                String type = newPullParser.nextText();
                                infos.newstype.type =type;
                                
                            }else if("authoruid2".equals(name)){
                                String authoruid2 = newPullParser.nextText();
                                infos.newstype.authoruid2 =authoruid2;
                                
                            }
                        }
                    }
                    
                break;
            case XmlPullParser.END_TAG:
                    if("news".equals(name)){
                        list_news.add(infos);
                    }

                break;
            case XmlPullParser.END_DOCUMENT:
                
                break;
            default:
                break;
            }

            eventType = newPullParser.next();

            
        }
        } catch (XmlPullParserException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }



//从assets中获取信息pull解析xml

public class MainActivity extends Activity {

    private static final String TAG = "MainActivity";
    private int eventType;
    private XmlPullParser newpullParser;
    private List<Javabean> list;
    private Javabean javabean;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        //获得xml文件解析器
        newpullParser = Xml.newPullParser();
        //获得文件
        try {
            InputStream inputStream = getAssets().open("data.xml");
            //将文件放到解析器
            newpullParser.setInput(inputStream, "utf-8");
            eventType = newpullParser.getEventType();

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        //解析xmL内容
        List<Javabean> pullxml = pullxml();
        for(Javabean javabean:pullxml){
            Log.i(TAG,javabean.toString());
        }
        
    }

    private List<Javabean> pullxml() {
        // TODO Auto-generated method stub
        
        while(eventType!=XmlPullParser.END_DOCUMENT){

            String name = newpullParser.getName();


            switch (eventType) {
            case XmlPullParser.START_DOCUMENT:
                
                break;
            case XmlPullParser.START_TAG:
                
                if("persons".equals(name)){
                    list = new ArrayList<Javabean>();
                }else if("person".equals(name)){
                    javabean = new Javabean();
                    String id = newpullParser.getAttributeValue(0);
                    javabean.setId(id);
                }else if("name".equals(name)){
                    try {
                        String names = newpullParser.nextText();
                        javabean.setName(names);
                    }  catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }else if("age".equals(name)){
                    try {
                        String ages = newpullParser.nextText();
                        javabean.setAge(ages);
                    }  catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                break;
            case XmlPullParser.END_TAG:
                if("person".equals(name)){
                    list.add(javabean);
                    javabean=null;
                }else if("persons".equals(name)){
                    return list;
                }
                break;
            default:
                break;
            }
            
            try {
                eventType = newpullParser.next();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            
        }
        return list;
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值