2012-05-02 8 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) { 

    } 
} 

активность класса

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

Вы можете использовать поток для проверки этого. Используя обработчик, вы можете отправлять сообщения. Проверка сообщений. Вы можете выполнить дальнейший процесс. Единственный возможный способ подключения потока с пользовательским интерфейсом - использовать обработчик. Я думаю, это кусок кода может вам помочь.

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); 
      } 
     } 

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