2012-08-24 2 views
0

사용자가 로그인 버튼을 클릭하면 웹 서비스에 충돌하고 싶습니다. 나는 그렇게하기 위해 다음과 같은 코드를 가지고있다.가 호출되지 않음 : onPostExecute

public void onClick(final View view) { 
    String orgKey = inputCompany.getText().toString(); 
    new getAppInfo().execute("http://example.webservice.com"); 

은 여기 내 getAppInfo

private class getAppInfo extends AsyncTask<String, Void, String> { 
    /** The system calls this to perform work in a worker thread and 
     * delivers it the parameters given to AsyncTask.execute() */ 
    @Override 
    protected String doInBackground(String... urls) { 
     String xml = null; 
     try { 
      // defaultHttpClient 
      DefaultHttpClient httpClient = new DefaultHttpClient(); 
      HttpGet httpGet = new HttpGet(urls[0]); 

      HttpResponse httpResponse = httpClient.execute(httpGet); 
      HttpEntity httpEntity = httpResponse.getEntity(); 
      xml = EntityUtils.toString(httpEntity); 

     } catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); 
     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     // return XML 
     return xml; 
    } 

    /** The system calls this to perform work in the UI thread and delivers 
     * the result from doInBackground() */ 
    @Override 
    protected void onPostExecute(String result) { 
     Document doc = GetDomElement(result); // getting DOM element 

     NodeList nl = doc.getElementsByTagName("details"); 
     getChildElements(nl); 
    } 

doBackground가 실행되고 있지만 onPostExecute 아니다. 나는 클릭에서 그것을 옮겼고 효과가 있었지만 onClick 안에 필요합니다.

내 onClick 내에서 onPostExecute을 실행하려면 어떻게해야합니까?

답변

0

구문이 올바르므로 백그라운드 프로세스에서 예외가 발생하여 백그라운드 스레드가 중지 될 수 있습니다. doInBackground 끝에 log 문을 넣거나 catch (Throwable t)를 try에 추가한다.

믿음을 가지십시오. doInBackground가 성공적으로 완료되면 호출됩니다.

제쳐두고, DOM 분석은 백그라운드에서 수행해야합니다. UI 스레드에서 ANR 팝업을 유발할 수있는 순간에이를 수행해야합니다.

+0

당신이 또한 OutOfMemoryError를 얻고 있을지도 모르다 - 당신이 또한 안드로이드 (자바에 다른)에서 붙잡을 수있는 큰 경우에 – siliconeagle

+0

또한, 당신은 당신의 매니 페스트에있는 인터넷 허가가다는 것을 확인한다 – siliconeagle

+0

통보를위한 감사합니다 – BigT

0

onPostExecutedoInBackground이 완료되면 호출됩니다. 로그 뭔가를 onPostExecute이 동작을 확인하려면보십시오.


doInBackground 방법에 대한 일반적인 catch 문을 추가합니다.

catch(Exception e){ 
    e.printStackTrace(); 
} 
+0

doInBackground가 완료되었습니다. 그것은 여전히 ​​ – BigT

+0

이라고 부르지 않고 onPostExecute에서 어떤 것을 로깅 해보고 작동하는 것을 볼 수 있습니다. – waqaslam

+0

심지어 onPostExecute에도 들어 가지 않습니다. 그게 문제 야. doInBackground는하지만 onPostExecute는 수행하지 않습니다. – BigT

0

먼저 Java의 일반적인 포인터 클래스 이름은 대문자로 된 CamelCase이며 메소드 이름은 소문자의 camelCase입니다.

귀하의 질문에 - 귀하가 활동을 종료하거나 작업을 시작한 대화 상자를 닫았습니까? 해당 onclick 처리기 외부에서 작동하는 경우, 내 생각 엔 뭔가가 AsyncTask 해당 메서드를 실행하려고하는 처리기 개체를 파괴하는 것입니다.

현재 Activity Handler에서 Runnable (AsyncTask를 실행)을 게시 해보십시오.

관련 문제