#android #multithreading
#Android #многопоточность
Вопрос:
Я создал экран-заставку и использовал запускаемый поток для разбора xml-файла с сервера, но когда я запускаю эту программу, она просто застревает на экране-заставке, и я использовал wifimanage, чтобы определить, подключено ли устройство к Интернету или нет, если это не так, то пропустите синтаксический анализ и перейдите к основному действию.
вот некоторые из моих кодов, не будет ли кто-нибудь так любезен ознакомиться с ними?
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:
Ваш код запускает действие только в том случае, если загрузка завершается неудачей. Вам нужно переместить создание намерения за пределы инструкции else. Измените свой метод на этот:
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;
}
Комментарии:
1. что ж, я изменил код на этот, но приложение по-прежнему зависало на заставке, на этом действие с заставкой не заканчивается, программа в конечном итоге перейдет к следующему действию, вот полная версия моего кода
2. попробуйте использовать синтаксические анализаторы SAX, и если выдается исключение, то пользователь не подключен к Интернету. Пример здесь: mkyong.com/java/how-to-read-xml-file-in-java-sax-parser