2013-06-06 6 views
-3

가끔 내 앱에서이 오류가 발생합니다. 버튼을 여러 번 클릭하면 충돌이 발생하고 버튼이 SOAP 요청을 서버에 보내고 전체 logcat이 다음과 같이 표시됩니다 : 클릭에java.lang.RuntimeException : doInBackground() 실행 중 오류가 발생했습니다. 원인 : java.lang.NullPointerException

E/AndroidRuntime(16290): FATAL EXCEPTION: AsyncTask #1 
06-06 15:17:16.003: E/AndroidRuntime(16290): java.lang.RuntimeException: An error occured while executing doInBackground() 
06-06 15:17:16.003: E/AndroidRuntime(16290): at android.os.AsyncTask$3.done(AsyncTask.java:200) 
06-06 15:17:16.003: E/AndroidRuntime(16290): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274) 
06-06 15:17:16.003: E/AndroidRuntime(16290): at java.util.concurrent.FutureTask.setException(FutureTask.java:125) 
06-06 15:17:16.003: E/AndroidRuntime(16290): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308) 
06-06 15:17:16.003: E/AndroidRuntime(16290): at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
06-06 15:17:16.003: E/AndroidRuntime(16290): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 
06-06 15:17:16.003: E/AndroidRuntime(16290): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) 
06-06 15:17:16.003: E/AndroidRuntime(16290): at enter code herejava.lang.Thread.run(Thread.java:1027) 
06-06 15:17:16.003: E/AndroidRuntime(16290): Caused by: java.lang.NullPointerException 
06-06 15:17:16.003: E/AndroidRuntime(16290): at com.bgi.genebook.task.QueryCalAllDataTask.doInBackground(QueryCalAllDataTask.java:24) 
06-06 15:17:16.003: E/AndroidRuntime(16290): at com.bgi.genebook.task.QueryCalAllDataTask.doInBackground(QueryCalAllDataTask.java:1) 
06-06 15:17:16.003: E/AndroidRuntime(16290): at android.os.AsyncTask$2.call(AsyncTask.java:185) 
06-06 15:17:16.003: E/AndroidRuntime(16290): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306) 
06-06 15:17:16.003: E/AndroidRuntime(16290): ... 4 more 

버튼 코드 실행됩니다

Map<String, Object> mapSyc = new HashMap<String, Object>(); 
mapSyc.clear(); 
QueryCalAllDataTask<VipOxygen> task = new QueryCalAllDataTask<VipOxygen>(
       this); 
mapSyc.put("date", date); 
mapSyc.put("wsdl", VipBloodOxygenWebService.wsdl); 
task.execute(mapSyc); 

을하고 QueryCalAllDataTask.java은 다음과 같습니다

public class QueryCalAllDataTask<T> extends 
     AsyncTask<Map<String, Object>, Integer, List<Map<String, String>>> { 
    GBListener<T> listener; 

    public QueryCalAllDataTask(GBListener<T> listener) { 
     this.listener = listener; 
    } 

    @Override 
    protected synchronized List<Map<String, String>> doInBackground(Map<String, Object>... params) { 
     List<Map<String, String>> contentListDay = new ArrayList<Map<String, String>>(); 
     Log.e("OPERATE", params[0].get("wsdl").toString()); // line 24 
     try{ 
     contentListDay = (List<Map<String, String>>)BaseWebService.getDataAllDaysCountOfMouth(params[0] 
       .get("wsdl").toString(), params[0].get("date").toString()); 
     }catch(Exception e){ 

     } 
     return contentListDay; 
    } 

    @Override 
    protected void onPostExecute(List<Map<String, String>> list) { 
     System.out.println("QueryTask.onPostExecute()" + list); 
     listener.getAllCalData(list); 
    } 

    @Override 
    protected void onProgressUpdate(Integer... values) { 
     System.out.println(values); 
    } 

} 

누가 나를 도울 수 있습니까? 그 이유는 무엇입니까? 이 충돌은 잠시 동안 나타납니다. 버튼을 여러 번 클릭하면!

+1

* 누가 나를 도울 수 있습니까? 그리고 왜? * 왜? – xyz

+1

왜 아무도 나를 도울까요 ?? 이 삶은 의미가 없습니다! 왜?? –

+0

'QueryCalAllDataTask.java' 파일의 24 번째 줄에서 오류가 발생합니다. 그 라인에 무엇이 있는지 모르기 때문에 더 이상 당신을 도울 수 없습니다. 빈 catch 블록의 경우 – jlordo

답변

1

오류가 가장 확실히 여기에 있습니다 :

contentListDay = (List<Map<String, String>>)BaseWebService. 
getDataAllDaysCountOfMouth(params[0].get("wsdl").toString(), 
params[0].get("date").toString()); 

어쨌든, get("wsdl")get("date") 중 하나가 null 반환되는 모르는, 당신은 객체가 존재하는지 알지 못하고 객체의 메소드를 호출해서는 안 또는 null입니다.

toString(),으로 전화하기 전에 확인해야합니다. 같은 뭔가 :

something = params[0].get("wsdl"); 

if (something==null) 
    System.out.println("Can't get parameter wsdl"); 
else 
    something.toString(); 

매개 변수 date와 동일한 작업을 수행하고 당신은 널 (null)이 반환 무엇을 알고, 그것을 고칠 수있을 것입니다.

+0

다시 내 질문을 편집 할 수 있습니까? – wonday

0

코드에서 가능한 조작으로 인해 NPE은 예외적 일 수 있습니다. params[0].get("wsdl").toString()입니다.

즉, 첫 번째 매개 변수 (색인 0 포함)에는 wsdl 키가 없습니다.

+0

다시 내 질문을 편집했습니다. 도와 드릴 수 있습니까? – wonday

+0

문제는 정확히 그 라인에 있습니다. 내 대답을 읽고, 문제는 키 (wsdl)가 비어있는 (null) 값이다 - 그것은 비어있다. – Andremoniy

+0

문제는 비어 있지만 왜 null인지는 알 수 있습니까? 버튼을 클릭하면 키와 값을 맵에 설정했습니다! – wonday

관련 문제