Android异步任务线程

Android异步任务线程,android,multithreading,android-asynctask,android-4.0-ice-cream-sandwich,Android,Multithreading,Android Asynctask,Android 4.0 Ice Cream Sandwich,亲爱的程序员们: 几个月前我制作了一个应用程序,它运行得非常完美。然而,在新的安卓ICS上,它开始崩溃。我查了一下,得到了一个主线程上的网络异常。我试着重写我的代码,但我无法让它像以前那样工作。。我尝试了异步任务,但也不起作用。。有人能帮我吗 我的代码:(如果您还需要XMLFunctions.class,请告诉我) package test.lmc; 导入java.util.ArrayList; 导入java.util.HashMap; 导入org.w3c.dom.Document; 导入org

亲爱的程序员们:

几个月前我制作了一个应用程序,它运行得非常完美。然而,在新的安卓ICS上,它开始崩溃。我查了一下,得到了一个主线程上的网络异常。我试着重写我的代码,但我无法让它像以前那样工作。。我尝试了异步任务,但也不起作用。。有人能帮我吗

我的代码:(如果您还需要XMLFunctions.class,请告诉我)

package test.lmc;
导入java.util.ArrayList;
导入java.util.HashMap;
导入org.w3c.dom.Document;
导入org.w3c.dom.Element;
导入org.w3c.dom.NodeList;
导入android.app.ListActivity;
导入android.content.Intent;
导入android.net.Uri;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.AdapterView.OnItemClickListener;
导入android.widget.ListAdapter;
导入android.widget.ListView;
导入android.widget.simpledapter;
导入android.widget.Toast;
公共类nieuwsflits扩展了ListActivity{
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.nieuwsflits);
字符串xml=XMLfunctions.getXML();
Document doc=XMLfunctions.XMLfromString(xml);
int numResults=XMLfunctions.numResults(doc);

如果((numResults我猜在
XMLfunctions.getXML();
方法中,您正在执行一个网络调用来检索XML。这是从onCreate()调用的)这是在UI线程上执行的。ICS非常严格,不允许您在UI线程上执行网络请求,因此您需要将其移动到
AsyncTask
Loader
,您需要对UI进行编码,以应对没有任何有效数据的情况。然后,在您的AsyncTask完成检索数据,它可以请求刷新UI以显示有效数据


我建议您的UI最初显示一个不确定的进度条(带有旋转的破折号),可能还有文本“Loading…”,让用户知道他们必须等待;一旦UI有有效的数据要显示,这些可以隐藏。

获得堆栈跟踪,或者关于错误的任何更多信息?是的,我的
XMLfunctions.getXML();
正在执行一个网络调用。问题是,我无法让它与异步任务一起工作,因为我的UI崩溃并获得许多NullPointerException,我认为是因为我的xml在调用UI后被解析。我知道这一定是可能的,但我想我做错了什么。有什么建议吗?
package test.lmc;

import java.util.ArrayList;
import java.util.HashMap;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

import android.app.ListActivity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

public class nieuwsflits extends ListActivity {

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.nieuwsflits);

    String xml = XMLfunctions.getXML();
    Document doc = XMLfunctions.XMLfromString(xml);

    int numResults = XMLfunctions.numResults(doc);

    if((numResults <= 0)){
        Toast.makeText(nieuwsflits.this, "Nog geen resultaten gevonden...", Toast.LENGTH_LONG).show();  
        finish(); 
    }

    ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();

    NodeList nodes = doc.getElementsByTagName("message");
    int max = 10;
    //fill in the list items from the XML document
    for (int i = 0; i < nodes.getLength(); i++) {
        HashMap<String, String> map = new HashMap<String, String>();    

        Element e = (Element)nodes.item(i);
        map.put("id", XMLfunctions.getValue(e, "id"));
        map.put("datum", XMLfunctions.getValue(e, "datum"));
        map.put("message-text", XMLfunctions.getValue(e, "message-text"));
        map.put("url", XMLfunctions.getValue(e, "url"));

        mylist.add(map);
    }       


    //Make a new listadapter
    ListAdapter adapter = new SimpleAdapter(this, mylist , R.layout.listadapter,
                    new String[] { "message-text", "datum" },
                    new int[] { R.id.item_title, R.id.item_subtitle });

    setListAdapter(adapter);

    final ListView lv = getListView();
    lv.setTextFilterEnabled(true);  
    lv.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {              
            @SuppressWarnings("unchecked")
            HashMap<String, String> o = (HashMap<String, String>) lv.getItemAtPosition(position);
            String url = o.get("url");
            String check ="";
            if ((url == check)) {
                Toast.makeText(nieuwsflits.this, "Geen website gevonden...", Toast.LENGTH_LONG).show();
            }
            else {
            Intent i = new Intent(Intent.ACTION_VIEW);
            i.setData(Uri.parse(url));
            startActivity(i);
            }
            /** Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(o.get("url"))); 
            startActivity(browserIntent); 
            Toast.makeText(nieuwsflits.this, "ID '" + o.get("url") + "' was clicked.", Toast.LENGTH_LONG).show(); */

            }
        });


    }