我似乎无法让这个工作,在progressDialog完成后显示如何显示警告对话框?
这是一些相关的代码:
progressDialog = ProgressDialog.show(MainActivity.this, "", "Loading...");
new Thread() {
public void run() {
try{
initializer();
} catch (Exception e) {
Log.e("tag", e.getMessage());
}
progressDialog.dismiss();
SharedPreferences welcome_pref = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);
welcome = welcome_pref.getString("getwelcome", "null");
if (welcome.equals("no")) {
}else{
AlertDialog welcome = new AlertDialog.Builder(MainActivity.this).show();
welcome.setContentView(R.layout.welcome);
welcome_pref = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);
SharedPreferences.Editor welc = welcome_pref.edit();
welc.putString("getwelcome", "no");
welc.commit();
}
}
}.start();
}
private void initializer() {
startMoving = (ImageView) findViewById(R.id.imMove);
aboutApp = (ImageView) findViewById(R.id.imAbout);
devSite = (ImageView) findViewById(R.id.imDevSite);
movingTips = (ImageView) findViewById(R.id.imTips);
rateApp = (ImageView) findViewById(R.id.imRate);
start = (EditText) findViewById(R.id.etFrom);
end = (EditText) findViewById(R.id.etTo);
startMoving.setOnClickListener(this);
aboutApp.setOnClickListener(this);
devSite.setOnClickListener(this);
movingTips.setOnClickListener(this);
rateApp.setOnClickListener(this);
tvabout = (TextView) findViewById(R.id.tvabout);
tvstartmove = (TextView) findViewById(R.id.tvStart);
tvrate = (TextView) findViewById(R.id.tvRate);
tvdevelop = (TextView) findViewById(R.id.tvDev);
tvmovetips = (TextView) findViewById(R.id.tvTips);
tvabout.setShadowLayer(30, 0, 0, 0xff000000);
tvstartmove.setShadowLayer(30, 0, 0, 0xff000000);
tvrate.setShadowLayer(30, 0, 0, 0xff000000);
tvdevelop.setShadowLayer(30, 0, 0, 0xff000000);
tvmovetips.setShadowLayer(30, 0, 0, 0xff000000);
checklistitem();
}
private void checklistitem() {
SharedPreferences createlistitem_pref = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);
checkitem = createlistitem_pref.getString("getcheck", "null");
if (checkitem.equals("no")) {
}else{
SQLHandler checkitemstat = new SQLHandler(MainActivity.this);
checkitemstat.open();
checkitemstat.createList();
checkitemstat.close();
SharedPreferences setitem_pref = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);
SharedPreferences.Editor setcheck = setitem_pref.edit();
setcheck.putString("getcheck", "no");
setcheck.commit();
}
}
}
我收到错误说Can't create handler inside thread that has not called Looper.prepare()
我知道导致此错误但是我不知道如何解决此问题。
这行代码导致了这一点。
progressDialog.dismiss();
SharedPreferences welcome_pref = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);
welcome = welcome_pref.getString("getwelcome", "null");
if (welcome.equals("no")) {
}else{
AlertDialog welcome = new AlertDialog.Builder(MainActivity.this).show();
welcome.setContentView(R.layout.welcome);
welcome_pref = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);
SharedPreferences.Editor welc = welcome_pref.edit();
welc.putString("getwelcome", "no");
welc.commit();
}
答案 0 :(得分:1)
您无法更新线程内的UI。只有通过主线程才能更新UI,您必须使用处理程序。 或者你可以这样做
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
progressDialog.dismiss();
AlertDialog welcome = new AlertDialog.Builder(MainActivity.this).show();
welcome.setContentView(R.layout.welcome);
welcome_pref = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);
SharedPreferences.Editor welc = welcome_pref.edit();
welc.putString("getwelcome", "no");
welc.commit();
}
});
答案 1 :(得分:1)
在runonUiThread中添加警报对话框显示代码,
this.runOnUiThread(new Runnable() {
public void run() {
// TODO Auto-generated method stub
}
});
像这样,
}else{
MainActivity.this.runOnUiThread(new Runnable() {
public void run() {
AlertDialog welcome = new AlertDialog.Builder(MainActivity.this).show();
welcome.setContentView(R.layout.welcome);
}
});
welcome_pref = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);
SharedPreferences.Editor welc = welcome_pref.edit();
welc.putString("getwelcome", "no");
welc.commit();
}
正如此处建议的答案之一所示,您无法从工作线程更新UI。更新任何UI时,您必须处于UI线程中。
因此,您需要使用处理程序或runonUiThread来执行此操作。但是由于runOnUiThread内部使用处理程序,它应该可以帮到你。
答案 2 :(得分:0)
SharedPreferences welcome_pref = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);
welcome = welcome_pref.getString("getwelcome", "null");
if (welcome.equals("no")) {
}else{
AlertDialog welcome = new AlertDialog.Builder(MainActivity.this).show();
welcome.setContentView(R.layout.welcome);
welcome_pref = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);
SharedPreferences.Editor welc = welcome_pref.edit();
welc.putString("getwelcome", "no");
welc.commit();
}
在Thread.