2010-08-14 4 views
5

내 Activity에서 사용자의 LoveFilm 대기열에있는 영화를 다운로드하는 데 사용하는 ProgressDialog가 나타나지 않습니다.ProgressDialog가 나타나지 않습니다.

public class MyListActivity extends Activity { 
    SharedPreferences prefs; 
    ProgressDialog m_progressDialog; 
    Thread listThread; 
    User user; 

    private Runnable threadProc_initializeQueue = new Runnable() { 
     public void run() { 
      user.fetchQueues(); 
      Queue defaultQueue = user.getDefaultQueue(); 
      defaultQueue.fetchTitles(); 

      m_progressDialog.dismiss(); 
     } 
    }; 

    /* (non-Javadoc) 
    * @see android.app.Activity#onCreate(android.os.Bundle) 
    */ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 

     prefs = getSharedPreferences(getString(R.string.app_name), MODE_PRIVATE); 

     // Authenticate the user if needs be. 
     if(!prefs.getBoolean("isAuthenticated", false)) { 
      Intent i = new Intent(this, OAuthActivity.class); 
      startActivity(i); 
      finish(); 
     } else { 
      // Get the users default list. 
      LoveDroid app = (LoveDroid) getApplication(); 
      user = new User(app); 

      m_progressDialog = ProgressDialog.show(MyListActivity.this, "Please Wait", "Loading", true); 
      listThread = new Thread(null, threadProc_initializeQueue); 
      listThread.run(); 
     } 

    } 

것은 나는이 문제를 다른 사람을 본 적이 그들은 모두 기본적으로 광산

m_progressDialog = ProgressDialog.show(MyListActivity.this, "Please Wait", "Loading", true); 
코드의 나머지 작동

, 사용자의 영화를 통해 다운로드과 같은 줄을 추천 주위에 얻을 대화창은 나타나지 않지만, 몇 초가 걸립니다. 대화가 사라지기 전에 나타나지 않습니다.

답변

7

그것은 더 나은 (대신 스레드의 - 그것은 일반적으로 안드로이드 활동에 좋습니다).

AsyncTask 클래스를 만들고 해당 클래스에서 onPreExecute에 진행률 대화 상자를 추가하고 onPostExecute에서이를 닫습니다. 예 : here을 찾을 수 있습니다. 에서 onCreate에서 ProgressDialog.show (...) (...)를 호출

  1. 가 (당신이 그것을 볼 수 없습니다 때문에 일반적으로 문제가 : 그 외에는

    , 코드에서 몇 가지 문제가있다 onCreate가 끝날 때까지 (보통 백그라운드 활동이 끝난 후 보통 끝납니다).

  2. 진행률 대화 상자의 모든 작업은 UI 스레드에서만 실행해야하므로 임의의 스레드에서 m_pd.dismiss()를 사용할 수 없습니다 (이 때문에 AsyncTask을 사용해야합니다).
+0

AsyncTask 클래스를 살펴 봐야합니다. 이전에는 사용 해본 적이 없으며 매우 유용합니다. 진행 대화 상자에서 dismiss() 호출은 나머지 스레드를 UI 스레드에서 호출해야하지만 실제로 모든 스레드에서 호출 할 수 있습니다. –

+0

당신은 Amitlicht에 자리를 잡았고, 나는 스레드를 AsyncTask로 교체했습니다. –

+0

하지만 대화 상자 개체는 preExecute 메서드에 대해 로컬입니까? –

1

MyListActivity.this 대신 this으로 전화하면 어떻게됩니까?

이것은 onCreate() 내에 있기 때문에 가능성은 없지만 UI 스레드에서 호출되지 않았을 수 있습니다. runOnUiThread (와 통화를 둘러싼

TRY) : 당신이 AsyncTask를 사용하는 경우

Activity me = this; 
    runOnUiThread(new Runnable() 
    { 
     public void run() 
     { 
      m_progressDialog = ProgressDialog.show(me, "Please Wait", "Loading", true); 
     } 
    }); 
관련 문제