2014-11-23 4 views
0

Я использовал Async Task много раз, но перед этим видом проблемы в первый раз. Поиск SO, но не нашел подходящего решения, которое решает мою проблему.onpostexecute не получает вызов после успешного завершения doinbackground

Моя проблема onPostExecute не вызвана в задачу Async, все операции, которые находятся в doinbackground, завершены, но контроль не достигает onPostExecute ... неспособный понять причину.

Пожалуйста, помогите мне.

Спасибо за ваше время.

Код:

public class deletedaily extends AsyncTask<Void , Void, long[]>{ 

    ProgressDialog pd; 
    long resultdelete; 
    protected void onPreExecute(){ 

     pd=new ProgressDialog(StockDetail.this); 
     if(pd!=null){ 

      pd.setMessage("Deleting data.....please wait"); 
      pd.show(); 
     } 
    } 

    protected long[] doInBackground(Void... params) { 

     // TODO Auto-generated method stub 
     try{ 

      Database.getInstance(getApplicationContext()).getWritableDatabase().beginTransaction(); 
      resultdelete = Database.getInstance(getApplicationContext()).getWritableDatabase().delete(st.tablename, st.column2 + "=? AND " + st.column3 + "=?", new String[] {getdailydate.toString(),stockname}); 
      Database.getInstance(getApplicationContext()).getWritableDatabase().setTransactionSuccessful(); 

      new popdailydata().execute(); //here calling list view to populate after deletion 
     } 
     catch(Exception dailydeleteerror){} 
     finally{ 
       Database.getInstance(getApplicationContext()).getWritableDatabase().endTransaction(); 
     } 
     return new long[] {resultdelete}; 
    } 

    protected void onPostExecute(long result){ 

     System.out.println("postexecute entered"); 
     if(pd!=null){ 

      pd.dismiss(); 
     } 

     if(result!=-1){ 

      Toast.makeText(getApplicationContext(),"Date deleted from your portfolio", Toast.LENGTH_LONG).show(); 
     } 
     else{ 

      Toast.makeText(getApplicationContext(),"Failed to delete ....try again", Toast.LENGTH_LONG).show(); 
     } 
    } 
} 

Редактировать ---------------------------------

Я звоню от OnClick из изображения Buton

deletedailydata.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 

        new deletedaily().execute(); 
       } 
      }); 
+0

Пожалуйста, покажите, как вы запускаете Asynctask .. – greenapps

+2

Это должно быть 'onPostExecute (long [] result)'. – greenapps

+0

@greenapps Спасибо за ваш отзыв .. Пожалуйста, проверьте мое редактирование – Siva

ответ

1

Это должно быть onPostExecute(long [] result).

+0

, если возможно, можете ли вы рассказать мне, почему эта линия вызвала проблему? – Siva

+0

Вы расширили свой класс, как 'AsyncTask '. Это означает, что возвращаемое значение doInBackground будет 'long []' и параметр onPostExecute также. Поскольку то, что вы получаете в onPostExecute, является результатом, возвращаемым doInBackgroud, тип должен быть одинаковым. – greenapps

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