2014-09-12 181 views
0

虽然我使用AsyncTask来创建一个用于从服务器调用数据的新线程,但是当我移动到此活动时,应用程序仍然崩溃。我无法指定错误的原因。任何帮助??????Android:无法启动活动

public class CustomizedListView extends Activity { 
static final String URL = "http://www.Vatrina-eg.com/men_tops.xml"; 
static final String KEY_SONG = "song"; // parent node 
static final String KEY_ID = "id"; 
static final String KEY_TITLE = "title"; 
static final String KEY_THUMB_URL = "thumb_url"; 
ListView list; 
LazyAdapter adapter; 
private class DownloadFilesTask extends AsyncTask<String, Integer, ArrayList<HashMap<String, String>>> { 
    protected ArrayList<HashMap<String, String>> doInBackground(String... strings) { 
     ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>(); 

     XMLParser parser = new XMLParser(); 
     String xml = parser.getXmlFromUrl(URL); // getting XML from URL 
     Document doc = parser.getDomElement(xml); // getting DOM element 
     NodeList nl = doc.getElementsByTagName(KEY_SONG); 
     // looping through all song nodes <song> 
     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(KEY_ID, parser.getValue(e, KEY_ID)); 
      map.put(KEY_TITLE, parser.getValue(e, KEY_TITLE)); 
      map.put(KEY_THUMB_URL, parser.getValue(e, KEY_THUMB_URL)); 

      // adding HashList to ArrayList 
      songsList.add(map); 
      // Getting adapter by passing xml data ArrayList 
      adapter=new LazyAdapter(CustomizedListView.this, songsList);   
      list.setAdapter(adapter); 
     } 
     return songsList; 
    } 
} 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.mainlistview); 
    list=(ListView)findViewById(R.id.list_listview); 
    new DownloadFilesTask().execute(URL); 
    list.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 
     } 
    });  
} 
} 

的logcat:

09-12 22:12:20.906: E/AndroidRuntime(19571): FATAL EXCEPTION: AsyncTask #1 
09-12 22:12:20.906: E/AndroidRuntime(19571): Process: com.vatrina.eg, PID: 19571 
09-12 22:12:20.906: E/AndroidRuntime(19571): java.lang.RuntimeException: An error occured while executing doInBackground() 
09-12 22:12:20.906: E/AndroidRuntime(19571): at android.os.AsyncTask$3.done(AsyncTask.java:300) 
09-12 22:12:20.906: E/AndroidRuntime(19571): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) 
09-12 22:12:20.906: E/AndroidRuntime(19571): at java.util.concurrent.FutureTask.setException(FutureTask.java:222) 
09-12 22:12:20.906: E/AndroidRuntime(19571): at java.util.concurrent.FutureTask.run(FutureTask.java:242) 
09-12 22:12:20.906: E/AndroidRuntime(19571): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
09-12 22:12:20.906: E/AndroidRuntime(19571): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
09-12 22:12:20.906: E/AndroidRuntime(19571): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
09-12 22:12:20.906: E/AndroidRuntime(19571): at java.lang.Thread.run(Thread.java:841) 
09-12 22:12:20.906: E/AndroidRuntime(19571): Caused by: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 
09-12 22:12:20.906: E/AndroidRuntime(19571): at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6915) 
09-12 22:12:20.906: E/AndroidRuntime(19571): at android.view.ViewRootImpl.focusableViewAvailable(ViewRootImpl.java:3227) 
09-12 22:12:20.906: E/AndroidRuntime(19571): at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:660) 
09-12 22:12:20.906: E/AndroidRuntime(19571): at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:660) 
09-12 22:12:20.906: E/AndroidRuntime(19571): at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:660) 
09-12 22:12:20.906: E/AndroidRuntime(19571): at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:660) 
09-12 22:12:20.906: E/AndroidRuntime(19571): at android.view.View.setFlags(View.java:9642) 
09-12 22:12:20.906: E/AndroidRuntime(19571): at android.view.View.setFocusableInTouchMode(View.java:6343) 
09-12 22:12:20.906: E/AndroidRuntime(19571): at android.widget.AdapterView.checkFocus(AdapterView.java:777) 
09-12 22:12:20.906: E/AndroidRuntime(19571): at android.widget.ListView.setAdapter(ListView.java:487) 
09-12 22:12:20.906: E/AndroidRuntime(19571): at com.vatrina.eg.CustomizedListView$DownloadFilesTask.doInBackground(CustomizedListView.java:59) 
09-12 22:12:20.906: E/AndroidRuntime(19571): at com.vatrina.eg.CustomizedListView$DownloadFilesTask.doInBackground(CustomizedListView.java:1) 
09-12 22:12:20.906: E/AndroidRuntime(19571): at android.os.AsyncTask$2.call(AsyncTask.java:288) 
09-12 22:12:20.906: E/AndroidRuntime(19571): at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
09-12 22:12:20.906: E/AndroidRuntime(19571): ... 4 more 
+0

你永远不会初始化'list'。 – dharms 2014-09-12 18:50:49

+0

我初始化了它,但没有改变。 'ListView list =(ListView)findViewById(R.id.list_listview);' – 2014-09-12 18:57:20

+0

将其更改为'list =(ListView)findViewById(R.id.list_listview);'。在前面添加ListView使它成为一个局部变量。 – dharms 2014-09-12 18:58:44

回答

0

更改onCreate这样:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.mainlistview); 
    list = (ListView)findViewById(R.id.list_listview); 
    new DownloadFilesTask().execute(URL); 
    list.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 
     } 
    });  
} 
+0

完成。但仍然崩溃。'09-12 22:04:26.263:E/AndroidRuntime(17627):致命例外:AsyncTask#1 09-12 22:04:26.263:E/AndroidRuntime(17627):进程:com.vatrina.eg,PID :17627 09-12 22:04:26.263:E/AndroidRuntime(17627):java.lang.RuntimeException:执行doInBackground()时发生错误 09-12 22:04:26.263:E/AndroidRuntime(17627) (FutureTask.java:\t at android.os.AsyncTask $ 3.done(AsyncTask.java:300) 09-12 22:04:26.263:E/AndroidRuntime(17627):\t at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java: 355)' – 2014-09-12 19:07:31

+0

该日志中还有其他内容吗? – dharms 2014-09-12 19:09:21

+0

是的,但我不能把它们全部写下来。 – 2014-09-12 19:11:08

0

最有可能list仍然是空当您尝试访问它onCreate()

+0

我该如何解决它? – 2014-09-12 18:58:22

相关问题