Android异步任务,防止UI冻结
我有这种代码的宁静,它从url获取一些xml数据 它的工作正常,但问题是,当它下载 并解析用户界面冻结的xml,这可能是用户的一个问题 这是上课时间Android异步任务,防止UI冻结,android,xml,android-listview,android-asynctask,Android,Xml,Android Listview,Android Asynctask,我有这种代码的宁静,它从url获取一些xml数据 它的工作正常,但问题是,当它下载 并解析用户界面冻结的xml,这可能是用户的一个问题 这是上课时间 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.kategoria); // getting intent data
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.kategoria);
// getting intent data
Intent in = getIntent();
String cat_name = in.getStringExtra("kategoria");
//Update Textview
TextView kategoriatw = (TextView)findViewById(R.id.name_of_cat);
kategoriatw.setText(cat_name);
// Kategoro URL
String catUrl = "http://sample.com/xmldata.xml";
ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>();
//MOTHERLAJME MULTIDIMENSIONAl
final List<HashMap<String, String>> MotherContainer= new ArrayList<HashMap<String, String>>();
try{
XMLParser parser = new XMLParser();
String xml = parser.getXmlFromUrl(catUrl); // getting XML
Document doc = parser.getDomElement(xml); // getting DOM element
//ALL
NodeList forecastW = doc.getElementsByTagName("newsitem");
for (int j = 0; j < forecastW.getLength(); j++)
{
HashMap<String, String> map = new HashMap<String, String>();
Node nodeday = forecastW.item(j);
Element dayElmnt = (Element) nodeday;
map.put("title", (parser.getValue(dayElmnt, "title")) );
map.put("intro", (parser.getValue(dayElmnt, "intro")).toString());
map.put("story_id", ""+j );
// adding HashList to ArrayList
menuItems.add(map);
//MULTI DIMENSIONAL ARRAY
HashMap<String, String> TheStory= new HashMap<String, String>();
TheStory .put("title", (parser.getValue(dayElmnt, "title")));
TheStory .put("story_date", parser.getValue(dayElmnt, "datetime"));
MotherContainer.add(j, TheStory);
/////////////////////////
}
} catch (Exception e) {
System.out.println("XML Pasing Excpetion = " + e);
}
// Adding menuItems to ListView
ListAdapter adapter = new SimpleAdapter(this, menuItems,
R.layout.week_day_item,
new String[] { "title", "intro", "story_id"}, new int[] {
R.id.title_list,
R.id.intro_list,
R.id.story_id_list});
setListAdapter(adapter);
// selecting single ListView item
ListView lv = getListView();
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// Starting new intent
Intent in = new Intent(getApplicationContext(), SingleLajm.class);
//start new intent....
startActivity(in);
}
});
}
@覆盖
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.kategoria);
//获取意图数据
Intent in=getIntent();
字符串cat_name=in.getStringExtra(“kategoria”);
//更新文本视图
TextView kategoriatw=(TextView)findViewById(R.id.name\u of_cat);
kategoriatw.setText(类别名称);
//Kategoro网址
字符串catUrl=”http://sample.com/xmldata.xml";
ArrayList menuItems=新建ArrayList();
//母亲节
最终列表MotherContainer=newArrayList();
试试{
XMLParser=新的XMLParser();
String xml=parser.getXmlFromUrl(catUrl);//获取xml
Document doc=parser.getDomeElement(xml);//获取DOM元素
//全部
NodeList forecastW=doc.getElementsByTagName(“新闻项”);
对于(int j=0;j
我想使用Asynctask,这样UI就不会冻结,我在类中使用它,
这是Im使用的类的“更新”版本,它实现了异步:
Document doc;
String xml;
ListView lv;
//ListViewAdapter adapter;
//ArrayList<HashMap<String, String>> menuItems;
ProgressDialog pDialog;
final ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>();
//MOTHERLAJME MULTIDIMENSIONAl
final List<HashMap<String, String>> MotherLajme= new ArrayList<HashMap<String, String>>();
final HashMap<String, String> nrLajmit = new HashMap<String, String>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.kategoria);
// getting intent data
Intent in = getIntent();
// Get emr
String catname = in.getStringExtra("kategoria");
//Textview
TextView kategoriatw = (TextView)findViewById(R.id.kategoria_emri);
kategoriatw.setText(catname);
}
private class loadMoreListView extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
// Showing progress dialog before sending http request
pDialog = new ProgressDialog(
Kategoria.this);
pDialog.setMessage("Please wait..");
pDialog.setIndeterminate(true);
pDialog.setCancelable(false);
pDialog.show();
}
protected Void doInBackground(Void... unused) {
new Runnable() {
public void run() {
XMLParser parser = new XMLParser();
String xml = parser.getXmlFromUrl("http://sample.com/data.xml"); // getting XML
Document doc = parser.getDomElement(xml); // getting DOM element
//ALL
NodeList forecastW = doc.getElementsByTagName("newsitem");
for (int j = 0; j < forecastW.getLength(); j++)
{
HashMap<String, String> map = new HashMap<String, String>();
Node nodeday = forecastW.item(j);
Element dayElmnt = (Element) nodeday;
map.put("title", (parser.getValue(dayElmnt, "title")) );
map.put("intro", (parser.getValue(dayElmnt, "intro")) );
map.put("story_id", ""+j );
// adding HashList to ArrayList
menuItems.add(map);
//MULTI DIMENSIONAL ARRAY
HashMap<String, String> TheLajmi= new HashMap<String, String>();
TheLajmi .put("title", (parser.getValue(dayElmnt, "title")));
TheLajmi .put("newsdate", parser.getValue(dayElmnt, "datetime"));
MotherLajme.add(j, TheLajmi);
/////////////////////////
}
}
};
return (null);
}
protected void onPostExecute(Void unused) {
// closing progress dialog
pDialog.dismiss();
// Adding menuItems to ListView
ListAdapter adapter = new SimpleAdapter(Kategoria.this, menuItems,
R.layout.week_day_item,
new String[] { "title", "intro", "story_id"}, new int[] {
R.id.title_list,
R.id.intro_list,
R.id.story_id_list});
setListAdapter(adapter);
// selecting single ListView item
ListView lv = getListView();
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// getting values from selected ListItem
// Starting new intent
Intent in = new Intent(getApplicationContext(), SingleLajm.class);
in.putExtra("title", "blabla");
startActivity(in);
}
});
}
}
文档文档;
字符串xml;
ListView lv;
//ListViewAdapter适配器;
//ArrayList菜单项;
ProgressDialog;
最终ArrayList menuItems=新ArrayList();
//母亲节
最终列表MotherLajme=newarraylist();
final HashMap nrLajmit=新HashMap();
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.kategoria);
//获取意图数据
Intent in=getIntent();
//获取电子病历
字符串catname=in.getStringExtra(“kategoria”);
//文本视图
TextView kategoriatw=(TextView)findViewById(R.id.kategoria_emri);
kategoriatw.setText(catname);
}
私有类loadMoreListView扩展了异步任务{
@凌驾
受保护的void onPreExecute(){
//发送http请求前显示进度对话框
pDialog=新建进度对话框(
卡蒂戈里亚;
pDialog.setMessage(“请稍候…”);
pDialog.setUndeterminate(真);
pDialog.setCancelable(假);
pDialog.show();
}
受保护的空位背景(空位…未使用){
新的Runnable(){
公开募捐{
XMLParser=新的XMLParser();
字符串xml=parser.getXmlFromUrl(“http://sample.com/data.xml“”;//获取XML
Document doc=parser.getDomeElement(xml);//获取DOM元素
//全部
NodeList forecastW=doc.getElementsByTagName(“新闻项”);
对于(int j=0;jprivate class LoadMoreListView extends AsyncTask<Void, Void, ArrayList<HashMap<String, String>>> {
@Override
protected void onPreExecute() {
// Showing progress dialog before sending http request
pDialog = new ProgressDialog(
AndroidListViewWithLoadMoreButtonActivity.this);
pDialog.setMessage("Please wait..");
pDialog.setIndeterminate(true);
pDialog.setCancelable(false);
pDialog.show();
}
protected ArrayList<HashMap<String, String>> doInBackground(Void... unused) {
ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>();
//MOTHERLAJME MULTIDIMENSIONAl
final List<HashMap<String, String>> MotherContainer= new ArrayList<HashMap<String, String>>();
try{
XMLParser parser = new XMLParser();
String xml = parser.getXmlFromUrl(catUrl); // getting XML
Document doc = parser.getDomElement(xml); // getting DOM element
//ALL
NodeList forecastW = doc.getElementsByTagName("newsitem");
for (int j = 0; j < forecastW.getLength(); j++)
{
HashMap<String, String> map = new HashMap<String, String>();
Node nodeday = forecastW.item(j);
Element dayElmnt = (Element) nodeday;
map.put("title", (parser.getValue(dayElmnt, "title")) );
map.put("intro", (parser.getValue(dayElmnt, "intro")).toString());
map.put("story_id", ""+j );
// adding HashList to ArrayList
menuItems.add(map);
//MULTI DIMENSIONAL ARRAY
HashMap<String, String> TheStory= new HashMap<String, String>();
TheStory .put("title", (parser.getValue(dayElmnt, "title")));
TheStory .put("story_date", parser.getValue(dayElmnt, "datetime"));
MotherContainer.add(j, TheStory);
/////////////////////////
}
} catch (Exception e) {
System.out.println("XML Pasing Excpetion = " + e);
}
return menuItems;
}
protected void onPostExecute(ArrayList<HashMap<String, String>> unused) {
// closing progress dialog
pDialog.dismiss();
// Adding menuItems to ListView
ListAdapter adapter = new SimpleAdapter(YourActivity.this, unused,
R.layout.week_day_item,
new String[] { "title", "intro", "story_id"}, new int[] {
R.id.title_list,
R.id.intro_list,
R.id.story_id_list});
setListAdapter(adapter);
}
new LoadMoreListView().execute();
AsyncTask<Void, Void, ArrayList<HashMap<String, String>>>
new Runnable() {
public void run()