Android App Startup上的AlertDialog

时间:2014-03-14 00:05:46

标签: android

我正在尝试在用户首次下载应用程序时运行此对话框,然后再也不会再显示。

这是我的代码:

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)

注意:为了安全起见,隐藏了包名称。

我哪里错了?

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

为什么要将代码放在一个线程中?如果你把警报放在线程之外它应该运行正常,如果它必须使用一个线程显示警告对话框&#34; runOnUiThread&#34;

答案 1 :(得分:1)

尝试将alertdialog放入onCreate()方法并使用:

if (isFirstStart) {
    dialog.show()
}

答案 2 :(得分:0)

您似乎正在尝试从主线程外部更改UI。 将您的AlertDialog代码放在新线程对象之外,它应该正常运行。