Android异步任务,防止UI冻结

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

我有这种代码的宁静,它从url获取一些xml数据

它的工作正常,但问题是,当它下载 并解析用户界面冻结的xml,这可能是用户的一个问题

这是上课时间

    @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()