Извините, я новичок в программировании Android.У меня есть парсер XML, который я не хочу запускать в потоке пользовательского интерфейса.Я хочу отображать диалоги выполнения, пока анализатор работает в своем собственном потоке, но я не хочу, чтобы основной поток запускал следующее действие до тех пор, пока анализатор не будет завершен.У меня есть код, но ProgressDialog не отображается в течение полной продолжительности.Вместо цикла while я попробовал parserThread.join () с теми же результатами.Кроме того, я хочу избежать таймаута потока пользовательского интерфейса.Любая помощь приветствуется.
Мой метод, который вызывает поток, за которым следует класс, реализующий Runnable:
private void parseGasStationData() {
gasStations = null;
StationParser sp = new StationParser(activity);
Thread parserThread = new Thread(sp);
parserThread.start();
while (parserThread.isAlive()) {
// do nothing
}
gasStations = sp.getList();
Log.v("Parser-Status", "xml parsed successfully: "
+ (gasStations != null));
}
public class StationParser implements Runnable {
private Activity activity;
private final ProgressDialog pd;
public StationParser(Activity activity) {
this.activity = activity;
pd = ProgressDialog.show(activity, "", "Parsing data...", true, false);
}
@Override
public void run() {
try {
runParser();
} catch (XmlPullParserException e) {
Log.e("Parser-Error", "XmlPullParserException", e);
e.printStackTrace();
} catch (IOException e) {
Log.e("Parser-Error", "IOException", e);
e.printStackTrace();
} catch (ParseException e) {
Log.e("Parser-Error", "ParseException", e);
e.printStackTrace();
}
pd.dismiss();
}