2012-05-02 5 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(); 
    } 
} 

는 다른 활동을 수행 할 수 있기 때문에 어떤 다른 오류가 없다.

이 (있는 경우)의 기능

webservice.updateallCatNews(); 

수행하지 왜

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

를 실행하지 않는 것처럼 보인다?

+0

스레드를 작성하고 처리기를 추가하여 처리가 완료되면 활동에 메시지를 다시 전달할 수 있습니다. 왜 AsyncTask를 사용하지 않는가? –

+0

스레드를 확장하고 활동이 구현하는 위임자 (예 : 인터페이스)를 등록하십시오. 웹 서비스 응답 – Blackbelt

+0

@DavidScott을 기반으로 콜백을 호출합니다. AsyncTask를 사용할 때'doInBackground()'액션을 수행 할 수없는 이유를 모르겠지만'onPostexecute()'는 수행합니까 do –

답변

0

당신은 이것을 확인하기 위해 스레드를 사용할 수 있습니다. 메시지를 보낼 수있는 처리기를 사용합니다. 메시지를 확인함으로써 추가 프로세스를 수행 할 수 있습니다. 스레드와 UI를 연결하는 유일한 방법은 핸들러를 사용하는 것입니다. 코드 조각이 도움이 될 수 있습니다.

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

    }; 
관련 문제