2011-04-27 4 views
0

나는 AsyncTask에서 큰 XML 문서를 구문 분석하려고합니다. FeinstaubActivity가 시작되지만 검은 화면 만보고 다른 활동을 시작한 RSSReaderActivity로 돌아갑니다.android AsyncTask xml parsing

로그 :

DEBUG/SntpClient(58): request time failed: java.net.SocketException: Address family not supported by protocol 
WARN/KeyCharacterMap(623): No keyboard for id 0 
WARN/KeyCharacterMap(623): Using default keymap: /system/usr/keychars/qwerty.kcm.bin 
INFO/ActivityManager(58): Starting activity: Intent { cmp=de.test.testapp/.FeinstaubActivity } 
DEBUG/AndroidRuntime(623): Shutting down VM 
WARN/dalvikvm(623): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 
WARN/dalvikvm(623): threadid=7: thread exiting with uncaught exception (group=0x4001d800) 
INFO/Process(623): Sending signal. PID: 623 SIG: 9 
INFO/ActivityManager(58): Process de.test.testapp (pid 623) has died. 
INFO/WindowManager(58): WIN DEATH: Window{4402be18 AtchDlg:de.test.testapp/de.test.testapp.RSSReaderActivity paused=false} 
INFO/WindowManager(58): WIN DEATH: Window{4400dd68 de.test.testapp/de.test.testapp.RSSReaderActivity paused=false} 
INFO/ActivityManager(58): Start proc de.test.testapp for activity de.test.testapp/.RSSReaderActivity: pid=631 uid=10035 gids={3003} 
DEBUG/dalvikvm(32): GC_EXPLICIT freed 299 objects/11488 bytes in 162ms 
INFO/UsageStats(58): Unexpected resume of de.test.testapp while already resumed in de.test.testapp 
DEBUG/dalvikvm(32): GC_EXPLICIT freed 57 objects/2440 bytes in 138ms 
INFO/ActivityManager(58): Displayed activity de.test.testapp/.RSSReaderActivity: 411 ms (total 532 ms) 
DEBUG/dalvikvm(32): GC_EXPLICIT freed 2 objects/48 bytes in 126ms 
DEBUG/dalvikvm(631): GC_FOR_MALLOC freed 3294 objects/461928 bytes in 72ms 
DEBUG/dalvikvm(631): GC_FOR_MALLOC freed 2750 objects/557024 bytes in 59ms 
DEBUG/dalvikvm(631): GC_FOR_MALLOC freed 2786 objects/506288 bytes in 60ms 
WARN/InputManagerService(58): Got RemoteException sending setActive(false) notification to pid 623 uid 10035 

코드

Document document = null; 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.feinstaub); 
      document = (Doxument) new ParseXMLFile().execute(); 
    } 

    private class ParseXMLFile extends AsyncTask<Integer, Integer, Document>{ 

    @Override 
    protected Document doInBackground(Integer... params) { 
     Document parsedXML = null; 
     try { 
      parsedXML = builder.parse(getApplicationContext().getResources().openRawResource(R.raw.finedust)); 
     } catch (NotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (SAXException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return parsedXML; 
    } 

} 

감사 플로트

답변

1

아, 확실하지 당신은 할 수 있습니다 : 무효 수익을 실행 http://developer.android.com/reference/android/os/AsyncTask.html을 보여줍니다.

이 원하는 :

당신이해야 할 범위 지정의 조금있다
Document document = null; 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.feinstaub); 
     new ParseXMLFile().execute(); 
    } 

    void setDocument(Document document){ this.document = document; } 

    private class ParseXMLFile extends AsyncTask<Integer, Integer, Document>{ 
    @Override public void onPostExecute(Document d){ setDocument(d); } 

    @Override 
    protected Document doInBackground(Integer... params) { 
     Document parsedXML = null; 
     try { 
      parsedXML = builder.parse(getApplicationContext().getResources().openRawResource(R.raw.finedust)); 
     } catch (NotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (SAXException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return parsedXML; 
    } 

} 

:의 부모 활동을 통과하거나 AsyncTask를 내부에서 다시 호출 할 수 있도록 적절하게 어떻게 든 setDocument 방법을 선언하지만, 뭔가 그게 그렇게해야합니다.

+0

감사합니다.이 기능은 완벽합니다. – float

+0

이유도 알고 있습니까? Button.setClickable (false); 무시되고 버튼을 클릭 할 수 있습니까? – float

+0

AsyncTask에 있습니까? – Femi