Java 安卓Can';t在未调用Looper.prepare()的线程内创建处理程序
要将输入值插入mysql数据库,我编写insert()方法 插入方法成功插入数据后,我想显示带有消息“Success”的对话框弹出窗口 但是我无法执行dialog.show()代码:( 可能是因为我通过了主要活动Java 安卓Can';t在未调用Looper.prepare()的线程内创建处理程序,java,android,mysql,Java,Android,Mysql,要将输入值插入mysql数据库,我编写insert()方法 插入方法成功插入数据后,我想显示带有消息“Success”的对话框弹出窗口 但是我无法执行dialog.show()代码:( 可能是因为我通过了主要活动 Code in MainActivity public class MainActivity extends Activity { //call insert method to insert data into mysql new Thread(new Runnable()
Code in MainActivity
public class MainActivity extends Activity {
//call insert method to insert data into mysql
new Thread(new Runnable() {
public void run() {
insert(name.getText().toString());
}
}).start();
}
public void insert(final String name){
//insert logic code
//returns true if success
if(true)
{
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(MainActivity.this);
alertDialogBuilder.setMessage("Record submited successfully!");
alertDialogBuilder.setTitle("Success!");
alertDialogBuilder.setCancelable(false);
alertDialogBuilder.setNeutralButton(android.R.string.ok,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton){
dialog.cancel();
}
})
.show();
}
}//END class MainActivity
这是我的问题:(在主应用程序线程上调用
show()
,例如从AsyncTask的onPostExecute()
调用AsyncTask但是我想在插入数据时显示对话框如何在insert方法之外写入它?:(@ashish:我不知道什么是“在insert方法之外写入它”意思是。您在回答中显示的代码是从后台线程调用的。虽然数据库逻辑本身可以在后台线程中插入,但需要从主应用程序线程更新UI。@ashish:正如我在回答中建议的,将线程更改为异步任务
,然后拨盘og在onPostExecute()
中工作。或者将对话框工作包装在Runnable
中,并在活动上调用runnuithread()
。或者将对话框工作包装在Runnable
中并调用post()
在任何方便的小部件上。或者使用事件总线(如greenrobot的EventBus)引发一个插入完成的事件,该事件在主应用程序线程上拾取,然后显示对话框。或者使用处理程序
从后台线程向其发送消息。谢谢你能给我举个同样的例子吗dev@ashish:嗯,下面是一个使用我书中的AsyncTask
的示例: