2013-08-09 4 views
0

여기 내 문제가 있습니다 : (응용 프로그램이 시작될 때) 데이터베이스가 업데이트되고 있음을 나타내는 레이아웃을 표시하고 싶습니다. 업데이트주기가 끝난 후 "add_multiple_categories_layout (0)"메서드를 사용하여 다른 레이아웃의 데이터를로드하려고합니다. 앱이 시작될 때만 필요합니다. 그 후 업데이트는 백그라운드에서 실행되어야하며 사용자는 앱을 사용할 수 있습니다.안드로이드 AsyncTask 및 응용 프로그램이 포 그라운드에서 돌아 왔을 때 onResume

이렇게하려면 DBupdated 및 1 업데이트주기 후 true로 설정되고 새 레이아웃이 "데이터베이스 업데이트 중 ..."레이아웃 대신 바뀝니다.

활동이 재개되면 "데이터베이스 다운로드 중 ..."이 다시 표시되어야합니다. 따라서 onResume에 DBupdated가 false로 변경되었습니다.

앱을 시작할 때 작동하지만 다시 시작한 후에는 onResume에서 부울 값을 true로 유지하는 것처럼 "download db ..."에서 레이아웃을 변경하지 않습니다.

protected void onResume() { 

      super.onResume(); 
      setContentView(R.layout.home_screen_layout); 

      add_downloading_DB_layout();   
      DBupdated = false; 
      new UpdateDB().execute(CATEGORY_URL, PRODUCTS_URL, TIMESTAMP_URL_CATEGORIES,  TIMESTAMP_URL_PRODUCTS); 
     } 

public class UpdateDB extends AsyncTask<String, Integer, String> { 

     @Override 
     protected String doInBackground(String... params) { 
      int whatToUpdate; 
      while(1+1 == 2){ 
       //update the database 
       if(DBupdated==false) 
       { 
        DBupdated = true; 
        publishProgress(); 
       } 
       try { Thread.sleep(36000000);  } catch (InterruptedException e) {e.printStackTrace();} 
      } 
     } 

     @Override 
     protected void onProgressUpdate(Integer... values) { 
      // TODO Auto-generated method stub 
      super.onProgressUpdate(values); 
      add_multiple_categories_layout(0); 
     } 

    } 
+0

디버거 또는 로깅을 사용하여'add_multiple_categories_layout()'이 호출 될 때 (그리고 호출 될 때 /) 'DBupdated'가 올바른 값을 갖는지 확인하십시오. 또한'add_multiple_categories_layout()'의 코드를 보여 주어야합니다. –

+0

로그하고 보려고합니다. add_multiple_categories_layout()은 앱을 시작할 때 호출됩니다. 그러나 앱을 다시 시작한 후 다시 열 때 앱이 변경되지 않습니다 (실제로 앱이 실행되지 않는 한). –

답변

0

활동에 부울 변수 DBupdated이 AsyncTask를에있는 한에서 아마 다른 : 여기

는 코드입니다. UpdateDB에 대한 정적 참조를 사용하고 있습니까? 당신이 할 수있는 것은 단지 새로운 작업을 만드는 것입니다. 그 부울이 정말로 필요합니까? 그렇지 않으면 매개 변수를 asynctask 생성자에 추가 할 수 있습니다. 또는 변수를 활동에 보존하고 필요할 때만 asynctask를 호출하십시오.

또한 당신은 동안 (사실) 대신 1 = 2

+ 1을 사용할 수 있습니다! DBupdated == false 대신 DBupdated.

왜 그렇게 오래자는 거니?

+0

부울은 클래스 변수로 선언되므로 동일합니다. onResume이 호출되면 false로 설정되지 않습니다. 내가 개발하는 동안 업데이트하지 않으려 고 너무 많이 잔다. 1 + 1 = 2 팁 주셔서 감사합니다. –

관련 문제