2012-03-17 5 views
2

나는 lauot-procce bar와 AsyncTask를 사용하여 xml에 대한 작업을 수행하고 사용자에게 표시하는 응용 프로그램을 작성했습니다.AsyncTask 및 처리 막대 작업

FATAL EXCEPTION: AsyncTask #2 
03-17 11:25:29.559: E/AndroidRuntime(31114): java.lang.RuntimeException: An error   while executing doInBackground() 
    03-17 11:25:29.559: E/AndroidRuntime(31114): at   android.os.AsyncTask$3.done(AsyncTask.java:200) 
    03-17 11:25:29.559: E/AndroidRuntime(31114): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274) 
    03-17 11:25:29.559: E/AndroidRuntime(31114): at java.util.concurrent.FutureTask.setException(FutureTask.java:125) 
    03-17 11:25:29.559: E/AndroidRuntime(31114): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308) 
03-17 11:25:29.559: E/AndroidRuntime(31114): at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
03-17 11:25:29.559: E/AndroidRuntime(31114): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 
03-17 11:25:29.559: E/AndroidRuntime(31114): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) 
03-17 11:25:29.559: E/AndroidRuntime(31114): at java.lang.Thread.run(Thread.java:1019) 
03-17 11:25:29.559: E/AndroidRuntime(31114): Caused by: java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0 
03-17 11:25:29.559: E/AndroidRuntime(31114): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:257) 
0 3-17 11:25:29.559: E/AndroidRuntime(31114): at java.util.ArrayList.get(ArrayList.java:311) 
    03-17 11:25:29.559: E/AndroidRuntime(31114):  at com.example.News.NewsActivity$GetDataTask.doInBackground(NewsActivity.java:67) 
    03-17 11:25:29.559: E/AndroidRuntime(31114): at 

내 코드는 다음과 같습니다 :

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.progdailog); 
mContext = this; 
    new GetDataTask().execute(); 
} 
protected void onPostExecute(Integer result) { 

     listAdapter = new CustomListAdapter(mContext, R.layout.list_item, 
       ListNews); 
     ListView lv = ((ListActivity) mContext).getListView(); 
     lv.setAdapter(listAdapter); // on test 

     lv.setTextFilterEnabled(true); 

     lv.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 
       if (position != 0) { 

        // When clicked, show a toast with the TextView text 
        String s = ReadXML.hadashotListItems.get(position - 1).link; 

        Intent intent = new Intent(NewsActivity.this, 
          WebActivity.class); 
        intent.putExtra("url", s); 

        startActivity(intent); 

       } 
      } 

      public void onScrollStateChanged(final AbsListView view, 
        final int scrollState) { 
       if (scrollState == 0) 
        listAdapter.notifyDataSetChanged(); 
      } 
     }); 

     //progDailog.dismiss(); 
     super.onPostExecute(result); 

    } 

} 

라인 67은 나는

오류를 을 마무리하지만, 내 코드와 함께 몇 가지 문제가됩니다 다시 였는지를 후 였는지를 표시 줄을 dismess 할 코드 :

protected Integer doInBackground(Void... params) { 
     try { 
      ReadXML = new ReadXMLFile(mContext, getIntent().getExtras() 
        .getString("urlXml")); 

      ListNews.add("NEWS"); 
      if (checkDate(ReadXML.hadashotListItems.get(0).pubDate,ReadXML.hadashotListItems.get(1).pubDate)) 
      for (int i = 0; i < ReadXML.hadashotListItems.size(); i++) { 

       ListNews.add(ReadXML.hadashotListItems.get(i).title + "\n" 
         + ReadXML.hadashotListItems.get(i).pubDate); 
      } 
      else 
       for (int i = ReadXML.hadashotListItems.size()-1; i >=0; i--) { 

        ListNews.add(ReadXML.hadashotListItems.get(i).title + "\n" 
          +  ReadXML.hadashotListItems.get(i).pubDate); 
       } 
     } catch (ParseException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (java.text.ParseException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     return 1; 
      } 

나는 생각합니다. g 잘못된보기. 코드를 변경하면 도움이 될 것입니다.

+0

다음 코드 줄을 가리 키십시오. com.example.News.NewsActivity $ GetDataTask.doInBackground (NewsActivity.java:67) – Egor

+1

GetDataTask()는 복사하지 못한 클래스입니다. 이것 좀 봐 http://stackoverflow.com/a/9407916/1012284 –

+0

당신의'ReadXMLFile'는 빈리스트를 리턴했습니다. 당신이해야 할 일을하기 전에 당신은해야합니다. 'if (ReadXML.hadashotListItems == null || ReadXML.hadashotListItems.size() == 0) return;'(null 체크가 아닌 경우 null 체크를 건너 뛸 수있다. – zapl

답변

1

NewsActivity.java의 67 행에 IndexOutOfBoundsException이 있습니다.

IndexOutOfBoundsException: Invalid index 0, size is 0 

요소가 없을 때 인덱스 0에 액세스하려고합니다. 나는 당신이 그 코드를 게시했다고 생각하지 않는다. 그래서 그 라인을 찾아 잘못된 색인 액세스를 고쳐라.