如何使用线程在启动画面中解析xml文件?

时间:2011-11-12 08:18:16

标签: android multithreading

我制作了一个启动画面并使用了一个可运行的线程来解析服务器上的xml文件,但是当我运行这个程序时,它只是停留在启动画面上,我用一个wifi管理来判断设备是否连接到互联网与否,如果不是,则跳过解析并跳转到主要活动。

这是我的一些代码,有人会非常友好地查看它吗?

private static WifiManager mWifiManager;
    private static UpdateInfo info;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.loading);

        mWifiManager = (WifiManager)
                this.getSystemService(Context.WIFI_SERVICE);
    }
    public UpdateInfo getUpdateInfo(InputStream is) throws Exception{  
        if (mWifiManager.getWifiState()==WifiManager.WIFI_STATE_ENABLED){
        XmlPullParser  parser = Xml.newPullParser();    
        parser.setInput(is, "utf-8");//设置解析的数据源   
        int type = parser.getEventType();  
        info = new UpdateInfo();//实体  
        while(type != XmlPullParser.END_DOCUMENT ){  
            switch (type) {  
            case XmlPullParser.START_TAG:  
                if("version".equals(parser.getName())){  
                    info.setVersion(parser.nextText()); //获取版本号  
                }else if ("url".equals(parser.getName())){  
                    info.setUrl(parser.nextText()); //获取要升级的APK文件  
                }else if ("description".equals(parser.getName())){  
                    info.setDescription(parser.nextText()); //获取该文件的信息  
                }  
                break;  
            }  
            type = parser.next();  
        }  
        }else{
             Intent intent = new Intent ();
             intent.setClass(loading.this, monkeynote.class);
             startActivity(intent);
           }

        return info;  

    } 

1 个答案:

答案 0 :(得分:1)

如果加载失败,您的代码只会启动活动。您需要在else语句之外移动intent创建。将您的方法更改为:

public UpdateInfo getUpdateInfo(InputStream is) throws Exception{  
  if (mWifiManager.getWifiState()==WifiManager.WIFI_STATE_ENABLED){
    XmlPullParser  parser = Xml.newPullParser();    
    parser.setInput(is, "utf-8");//设置解析的数据源   
    int type = parser.getEventType();  
    info = new UpdateInfo();//实体  
    while(type != XmlPullParser.END_DOCUMENT ){  
        switch (type) {  
        case XmlPullParser.START_TAG:  
            if("version".equals(parser.getName())){  
                info.setVersion(parser.nextText()); //获取版本号  
            }else if ("url".equals(parser.getName())){  
                info.setUrl(parser.nextText()); //获取要升级的APK文件  
            }else if ("description".equals(parser.getName())){  
                info.setDescription(parser.nextText()); //获取该文件的信息  
            }  
            break;  
        }  
        type = parser.next();  
    }  
  }
  Intent intent = new Intent ();
  intent.setClass(loading.this, monkeynote.class);
  startActivity(intent);


  return info;  

}