2011-11-08 2 views
0

웹 응용 프로그램을 여러 번 호출하는 안드로이드 응용 프로그램이 있습니다. ksoap2 메서드를 호출하면 응용 프로그램이 응답하지 않게되므로 모든 것을 AsyncTask 클래스에 넣어야했습니다.android ksoap2 응답 문제

내가 한 것은 내 주 프로그램에서했던 것처럼 onPreExecute()에 ProgressDialog를 표시하고 doInBackground에서 웹 서비스를 호출하는 것입니다. 그러나 웹 서비스에 대한 호출이 작동하더라도 웹 서비스의 응답은 "[email protected]"입니다. FYI com.SmartInfinity는 내 응용 프로그램 패키지이고 InfinityMain은 내 주요 활동이고 webServiceCall은 웹 서비스를 호출하는 메서드입니다.

왜 이런 일이 일어나는 지 아는 사람이 있습니까? 웹 서비스는 "[field_x1 = value_x1; field_y1 = value + y1; field_x2 = value_x2]와 같은 결과를 반환합니다." AsyncTask 외부에서 같은 인수를 사용하여 동일한 함수를 호출하면 완벽하게 작동합니다 .

도움 주셔서 감사합니다.

편집 :

private class webServiceCall extends AsyncTask<String, Void, Object> 
{ 
    @Override 
    protected void onPreExecute() 
    { 
     dialog.show(); 
    } 

    protected Object onPostExecute(Object... params) 
    { 
     dialog.dismiss(); 
     return params; 
    } 

    @Override 
    protected Object doInBackground(String... params) 
    { 
     Object result = null; 
     String[] temp = new String[params.length - 2]; 
     String method_name = params[0]; 
     String action_name = params[1]; 
     for (int i = 2; i < params.length; i++) 
     { 
      temp[i-2] = params[i]; 
     } 
     result = callWebService(method_name, action_name, temp, 60); 
     dialog.dismiss(); 
     return result; 
    } 

} 

이 결과는 다음 문자열로 변환하고 일반적으로 사용됩니다 여기 내 코드입니다. 나는 AsyncTask를 호출하고 내 결과를 처리하는 방법은 다음과 은 다음과 같습니다

Object result = new webServiceCall().execute(UserArgs); 


     String str = result.toString(); 
     String delims = "[=;]+"; 
     String [] stringuser = str.split(delims); 
+0

응답을 원한다면 오류가있는 toString처럼 보입니까? – Tobias

+0

사실 예, 응답을 객체로 사용하고 .toString()을 사용하지만, AsyncTask 외부에서 수행하는 작업도 마찬가지입니다. 어떻게 극복합니까? – Athan

+0

비어있는 객체에서 toString()을 호출해야합니다 (응답 전에 실행되기 때문에 사용할 수 있습니까?).이 문제의 관련 코드가 좋을 것입니다. 알아 내기가 너무 어려워서는 안됩니다 :) – Tobias

답변

1

개체 결과 = 새로운 webServiceCall() (UserArgs)을 실행;.

이것이 문제입니다. 새로운 webServiceCall(). execute (UserArgs); 귀하의 asyncTask의 결과를 반환하지 않습니다 귀하의 작업에 대한 참조를 반환합니다. callWebService의 결과는 onPostExecute()로 보내집니다. 여기에 결과를 사용할 수 있습니다. 여기에서 콜백을 호출하거나 결과를 직접 사용할 수 있습니다 (여기서 UI 스레드로 돌아와 여기서 UI를 수정할 수 있습니다).

+0

결과는 onPostExecute()로 보내지 만 이클립스에서는 로컬에서 사용하지 않는 것으로 표시되어 있으므로 알 수 없다. – Athan

+0

@Overridde를 위에 추가하면 어떻게됩니까? 어쨌든 작동하지 않는다면 일식을 신경 쓰지 마십시오. 일식 UI 버그와 경고가 컴파일을 방해하지 않습니다. 죄송합니다. 경고에 대한 이유가 "없다"면 전체 프로젝트가 더 필요합니다. – Tobias