2016-06-07 4 views
0

Я использую AsyncTask для вызова веб-службы и предоставления данных, полученных из веб-службы.загрузка занимает так много времени, иногда в asynctask android

это работает нормально, но иногда Progress Dialog не увольняется и не может видеть причину этого в журнале.

Пример :: У меня есть веб-сервис, который вызывался, чтобы получить данные списка с индексацией (для 1 он будет возвращать первые 5 данных и 2 будет возвращать второй 5 данных и так далее)

Как только я нажимаю кнопку 1, он возвращает данные и визуализирует их, и когда я нажимаю кнопку страницы 2, она начинает загружаться и не увольняется. ни данные не отображаются, ни диалог прогресса не отклоняются. теперь я закрыл приложение и снова начал работать, и на этот раз ситуация работала очень хорошо.

Любая помощь будет оценена заранее спасибо

Код для AsyncTask:

public class getList extends AsyncTask<Void, String, String> { 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     pDialog = new ProgressDialog(getActivity()); 
     pDialog.setCancelable(false); 
     pDialog.setMessage("Please wait..."); 
     pDialog.setCanceledOnTouchOutside(false); 
     pDialog.show(); 
    } 

    @Override 
    protected String doInBackground(Void... params) { 
     String text = null; 
     JSONObject json; 
     HttpClient httpclient = new DefaultHttpClient(); 
     //Configuration.empcode.trim() 
     HttpGet httppost = new HttpGet(ListURL+UserCode+"/"+indexNo); 

     try { 
      HttpResponse response = httpclient.execute(httppost); 

      // for JSON: 
      if (response != null) { 
       InputStream is = response.getEntity().getContent(); 
       BufferedReader reader = new BufferedReader(
         new InputStreamReader(is)); 
       // String result = EntityUtils.toString((HttpEntity) 
       // response); 
       StringBuilder sb = new StringBuilder(); 
       String line = null; 
       try { 
        while ((line = reader.readLine()) != null) { 
         sb.append(line + "\n"); 
        } 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } finally { 
        try { 
         is.close(); 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 
       } 
       text = sb.toString(); 
      } 

     } catch (ClientProtocolException e) { 
      // TODO Auto-generated catch block 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
     } 
     return text; 
    } 

    @Override 
    protected void onPostExecute(String result) 
    { 



     pDialog.dismiss(); 
     if(result!=null) 
     { 
      try 
      { 
       JSONObject resultObject = new JSONObject(result); 
       JSONArray resultArray = resultObject.getJSONArray("Table"); 

       for(int i =0;i<resultArray.length();i++) 
       { 
        JSONObject resultObjects = resultArray.getJSONObject(i); 
        Code = resultObjects.getString("Code"); 
        Title = resultObjects.getString("Title"); 
        status= resultObjects.getString("status"); 
        date= resultObjects.getString("date"); 


        TitleList.add(Title); 
        CodeList.add(Code); 
        statusList.add(status); 
        dateList.add(date); 

        int count = db.getInProgressCount(CourseCode); 

        if(count==0) 
        { 
         db.addInProgress(new InProgressTable(Code,Title,status,date)); 
        } 
        else 
        { 
         db.updateInProgress(new InProgressTable(Code,Title,status,date)); 
        } 
       } 

       adapter = new CustomInProgressList(getActivity(),TitleList,CodeList,statusList,dateList); 

       //adapter.setCustomButtonListner(Catalog_Activity.this); 
       list.setAdapter(adapter); 

       scrollMyListViewToBottom(resultArray.length()); 
       int count = db.getAllInProgressCount(); 
       if (adapter.getCount()<1 && count<1){ 
        list.setVisibility(View.GONE); 
        noRes.setVisibility(View.VISIBLE); 
       }else { 
        list.setVisibility(View.VISIBLE); 
        noRes.setVisibility(View.GONE); 
       } 

       if (resultArray.length()<5); 
       loadMore.setVisibility(View.GONE); 
      } 
      catch(Exception ex) 
      { 
       ex.printStackTrace(); 
      } 
     } 
     else 
     { 
      AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
      builder.setTitle("Alert");    
      builder.setMessage("Data is not available, Please try again later"); 
      builder.setPositiveButton("OK", new DialogInterface.OnClickListener() 
      { 
       public void onClick(DialogInterface dialog, int which) 
       { 
       dialog.cancel(); 
       } 
      }); 

      AlertDialog dialog = builder.create(); 
      dialog.show(); 
     } 
    } 
} 

Я использовал множественный AsyncTask в моем приложении. Это проблема?

+0

показать свои коды пожалуйста) –

+0

пожалуйста, напишите код –

+0

@StepanMaksymov см моего пост обновлен –

ответ

1

нормально вот ваша задача -

pDialog как я понимаю объявлен в деятельности. Давайте посмотрим на ситуацию с двумя запросами.

, когда вы начали первый, и сразу же запустите другое - ваше новое pDialog - это новое диалоговое окно (оно указывает на другое диалоговое окно), и сначала оно существует без указания на него, и оно не закрыто! вот почему вы не закрыли диалог.

это будет вызвано в ситуации, когда:

1) первый запрос начала;

2) второй запрос начат до завершения первого запроса;

Вы должны обработать один диалог во всех ваших запросах или закрыть диалоговое окно перед его повторной инициализацией.

+0

. Я попробую, но решение кажется очень логичным. –

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

  • Нет связанных вопросов^_^