我正在尝试在用户首次下载应用程序时运行此对话框,然后再也不会再显示。
这是我的代码:
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)
注意:为了安全起见,隐藏了包名称。
我哪里错了?
感谢您的帮助。
答案 0 :(得分:2)
为什么要将代码放在一个线程中?如果你把警报放在线程之外它应该运行正常,如果它必须使用一个线程显示警告对话框&#34; runOnUiThread&#34;
答案 1 :(得分:1)
尝试将alertdialog
放入onCreate()
方法并使用:
if (isFirstStart) {
dialog.show()
}
答案 2 :(得分:0)
您似乎正在尝试从主线程外部更改UI。 将您的AlertDialog代码放在新线程对象之外,它应该正常运行。