2012-05-02 19 views
0

當我開始一個活動,我會執行此操作AsyncTask以外的任何方式?

webservice.updateallCatNews(); 

此功能檢索在線數據庫中的數據的本地數據庫。結束時間不是固定的,取決於網速。

我想知道何時該動作完成執行。有時15,但有時10或20.我需要在完成後開始活動。

除了asynctask之外,任何函數都可以檢測到動作完成了嗎?

private class UpdatingNews extends AsyncTask<String, Void, String> { 

    @Override 
    protected String doInBackground(String... params) { 
     webservice.updateallCatNews(); 
     return null; 
    } 

    @Override 
    protected void onPostExecute(String result) { 

    } 
} 

Activity類

private UpdatingNews update; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main_formnewuser); 
    webservice = new Database_WebService(this); 

    update = new UpdatingNews(); 
    if (isOnline() == true) { 
     update.execute("..."); 

    } 
} 

UpdateallCatNews類

public void updateallCatNews() { 
    try { 
     List<List_CategoryNews> newsCat = dbhelper.getAllNewsCategories(); 
     for (List_CategoryNews nwCat : newsCat) { 

      int CatNewsID = nwCat.getCatID(); 

      if (CatNewsID != 0) { 
       List_CategoryNews deleteNewsCat = new List_CategoryNews(
         CatNewsID); 
       dbhelper.DeleteNewsCat(deleteNewsCat); 
      } 
     } 
     GetNewsCategory(); 
    } catch (Exception ex) { 
     AlertDialog.Builder b = new AlertDialog.Builder(mContext); 
     b.setMessage(ex.toString()); 
     b.show(); 
    } 
} 

這個類裏面,有沒有其他的錯誤,因爲其他活動可以執行。

這如果()看起來像沒有運行

if(update.getStatus().equals(AsyncTask.Status.RUNNING)); 

爲什麼功能

webservice.updateallCatNews(); 

不執行?

+0

您可以創建一個線程併爲其添加一個處理程序,該程序會在完成時將消息傳回給您的活動。爲什麼不使用AsyncTask? –

+0

擴展一個線程並註冊您的活動實現的委託(例如一個接口)。調用基於webservice響應的回調 – Blackbelt

+0

@DavidScott,我不知道爲什麼'doInBackground()'行動無法執行時,我使用AsyncTask但'onPostexecute()'它確實 –

回答

0

你可以使用線程來檢查this.Here使用處理程序,你可以發送messages.By檢查消息你可以做進一步的過程。連接線程與用戶界面的唯一可能的方式是使用處理程序。我認爲這一段代碼可能會幫助你。

Thread animator = new Thread() { 
     public void run() { 
      int i = 0; 
      try { 
       sleep(2000); 
       while (i < 4) { 
        sleep(50); 
        handler.sendMessage(handler.obtainMessage(i)); 
        i++; 
       } 
      } catch (Exception e) { 

      } 
     } 
    }; 
    animator.start(); 
    handler = new Handler() { 

     @Override 
     public void handleMessage(Message msg) { 
      super.handleMessage(msg); 
      if (msg.what == 0) { 
       animatedimage.setImageResource(R.drawable.sub1); 
      } else if (msg.what == 1) { 
       animatedimage.setImageResource(R.drawable.sub2); 
      } else if (msg.what == 2) { 
       animatedimage.setImageResource(R.drawable.sub3); 
      } else if (msg.what == 3) { 
       animatedimage.setImageResource(R.drawable.sub4); 
      } 
     } 

    }; 
相關問題