gpt4 book ai didi

android - 进度对话框在异步任务中只显示很短的时间并且 Activity 加载缓慢

转载 作者:太空狗 更新时间:2023-10-29 13:33:23 26 4
gpt4 key购买 nike

我正在开发我的第一个 Android 应用程序,我想显示一个进度对话框,直到在 doInBackground 方法中处理 xml 文件。此 Activity 是为响应 onclick 事件而加载的。出乎意料的是, Activity 需要几秒钟才能显示,并且进度对话框显示的时间非常短(几毫秒)。

这是我的代码。我将 AsyncTask 用作内部类。我只是找不到我哪里出错了。

public class WhatToSee extends ListActivity {
ListView whatToSee;
ArrayList<HashMap<String, String>> whatToSeeInfo = new ArrayList<HashMap<String, String>>();
WhatToSeeAdapter adapter;
String cityName;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.whattosee);
cityName = getIntent().getStringExtra("name");
whatToSee = (ListView) findViewById(android.R.id.list);
adapter= new WhatToSeeAdapter(this, whatToSeeInfo);
whatToSee.setAdapter(adapter);
new WhatToSeeLoader().execute();
}




public class WhatToSeeLoader extends AsyncTask<Void, String, String> {
ProgressDialog progress = new ProgressDialog(WhatToSee.this);
String url = "http://wearedesigners.net/clients/clients12/tourism/fetchWhatToSeeList.php";
final String TAG_MAIN = "item";
final String TAG_ID = "itemId";
final String TAG_NAME = "itemName";
final String TAG_DETAIL = "itemDetailText";
final String TAG_MAP = "itemMapData";
final String TAG_ITEM_IMAGE = "itemImages";
final String TAG_MAP_IMAGE = "mapImage";
XMLParser parser = new XMLParser();
String xml = parser.getXmlFromUrl(url); // getting XML
Document doc = parser.getDomElement(xml); // getting DOM element
NodeList nl = doc.getElementsByTagName(TAG_MAIN);

@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
progress.setMessage("Loading What To See List");
progress.setIndeterminate(true);
progress.show();

}

@Override
protected String doInBackground(Void... params) {
// TODO Auto-generated method stub
for (int i = 0; i < nl.getLength(); i++) {
// creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
Element e = (Element) nl.item(i);
// adding each child node to HashMap key => value
map.put(TAG_ID, parser.getValue(e, TAG_ID));
map.put(TAG_NAME, parser.getValue(e, TAG_NAME));
map.put(TAG_DETAIL, parser.getValue(e, TAG_DETAIL));
map.put(TAG_MAP, parser.getValue(e, TAG_MAP));
map.put(TAG_MAP_IMAGE, parser.getValue(e, TAG_MAP_IMAGE));
map.put(TAG_ITEM_IMAGE, parser.getValue(e, TAG_ITEM_IMAGE));

// adding HashList to ArrayList
whatToSeeInfo.add(map);
}
return null;
}

@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
adapter.notifyDataSetChanged();
progress.dismiss();

}

}

有人可以帮我解决这个问题吗?先感谢您。

最佳答案

最有可能调用 String xml = parser.getXmlFromUrl(url);//获取 XML 会减慢您的代码。它在主线程中执行,我希望它(从它的名字)做一些网络相关的工作,这些工作基本上不应该在 UI 线程中完成(例如在你的 doInBackground 方法中)。
因此,要修复,请尝试将与 xml 相关的初始化人员移到 doInBackground() 中。

关于android - 进度对话框在异步任务中只显示很短的时间并且 Activity 加载缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13179687/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com