2013-06-06 2 views
-3

Иногда я получаю эту ошибку при сбое в моем приложении. Когда я нажимаю кнопку несколько раз, это будет краш, кнопка отправляет запрос SOAP на сервер и полный логарифм в следующем :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

Ошибка возникает в строке 24 в файле 'QueryCalAllDataTask.java'. Поскольку я не знаю, что в этой линии, я больше не могу вам помочь. – jlordo

ответ

1

Ошибка наиболее конечно, здесь:

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

Я не знаю, какой один из get("wsdl") и get("date") возвращается нуль, во всяком случае, вы никогда не должны вызвать метод объекта, не зная, если объект существует или это null.

Перед тем как позвонить toString(),, вы должны это проверить. Что-то вроде:

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

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

Сделайте то же самое с параметром date и вы будете в состоянии знать, что возвращение нуля там, и исправить ее.

+0

Я еще раз редактирую свой вопрос, вы можете помочь? – wonday

0

Возможная операция в коде, которая может вызвать исключение NPE, это params[0].get("wsdl").toString().

Это означает, что ваш первый параметр (с индексом 0) не имеет ключа wsdl.

+0

Я снова задал свой вопрос, вы можете помочь? – wonday

+0

Как я и ожидал, проблема заключается именно в этой строке. Прочитайте мой ответ, проблема с пустым (нулевым) значением с ключом 'wsdl' - пустая. – Andremoniy

+0

Я знаю, проблема с пустым, но почему это null? Я установил ключ и значение на карту при нажатии кнопки! – wonday

Смежные вопросы