2014-03-14 24 views
1

我試圖在用戶第一次下載應用程序後再運行此對話框,然後再次顯示。Android應用啓動時的AlertDialog

這裏是我的代碼:

Thread t = new Thread(new Runnable() { 

@Override 
public void run() { 
    SharedPreferences getPrefs = PreferenceManager 
     .getDefaultSharedPreferences(getBaseContext()); 
    boolean isFirstStart = getPrefs.getBoolean("key", true); 

    if (isFirstStart) { 
     //Line 39 is next 
     new AlertDialog.Builder(MainActivity.this) 
     .setTitle("Sample Title") 
     .setMessage("Sample Message") 
     .setNeutralButton("OK", new DialogInterface.OnClickListener() { 

       @Override 
       public void onClick(DialogInterface arg0, int arg1) { 

       } 
     }) 
     .show(); 

      SharedPreferences.Editor e = getPrefs.edit(); 
      e.putBoolean("key", false); 
      e.commit(); 
     } 

    } 
}); 

t.start(); 

此代碼是在FragmentActivity內的onCreate方法。特別是有三個滾動選項卡。

我正在以下RunTimeError:

03-13 16:54:02.803 6759-6784/com.hidden.hidden E/AndroidRuntime﹕ FATAL EXCEPTION: Thread-7125 
    Process: com.hidden.hidden, PID: 6759 
    java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 
      at android.os.Handler.<init>(Handler.java:200) 
      at android.os.Handler.<init>(Handler.java:114) 
      at android.app.Dialog.<init>(Dialog.java:109) 
      at android.app.AlertDialog.<init>(AlertDialog.java:114) 
      at android.app.AlertDialog$Builder.create(AlertDialog.java:931) 
      at android.app.AlertDialog$Builder.show(AlertDialog.java:950) 
      at com.hidden.hidden.MainActivity$1.run(MainActivity.java:39) 
      at java.lang.Thread.run(Thread.java:841) 

注:包名是隱藏的安全性。

我哪裏錯了?

感謝您的任何幫助。

+2

消除'Thread'並將這些代碼直接放在你的'onCreate()'中,你應該沒問題。 – codeMagic

+0

@codeMagic - Duh,謝謝;) –

+0

;)沒問題... – codeMagic

回答

2

爲什麼你把代碼中的線程內?如果你把警報的線程之外它應該運行良好,如果必須使用一個線程裏面顯示「runOnUiThread」的警告對話框中

+0

現在正常工作。這是我的骨頭錯誤。謝謝! –

1

嘗試把在alertdialogonCreate()方法和使用:

if (isFirstStart) { 
    dialog.show() 
} 
+0

現在正常工作。這是我的骨頭錯誤。謝謝! –

0

它看起來像你想的UI主線程的外部改變。 將您的AlertDialog代碼放到新線程對象之外,並且它應該正常運行。

相關問題