我正在尝试打开AlertDialog。打开此AlertDialog时,线程需要等待用户输入才能继续其程序。我读到我需要锁定需要等待和通知的对象。当我在手机上运行此代码时。 alertdialog不会显示,看起来应用程序正在循环,因为几秒钟后我收到一条消息,表明应用程序没有响应。下面你会发现我写的代码..顺便说一下。我是android编程的处女。所以请温柔:P
public class EditTagActivity extends Activity{
AlertDialog alertDialog;
Runnable h = new Runnable()
{
@ Override
public void run()
{
alertDialog.show();
synchronized(g)
{
try
{
Log.d("Threads", "g.wait()");
g.wait();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
};
Runnable g = new Runnable()
{
@Override
public void run()
{
Log.d("Threads", "createAlertDialog()");
createAlertDialog();
runOnUiThread(h);
}
};
public AlertDialog alert;
Runnable test = new dialogManager();
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edit_tag);
Log.d("Threads", "setup()");
setup();
}
void setup()
{
Log.d("Threads", "g.run()");
g.run();
}
void createAlertDialog()
{
Builder alert = new AlertDialog.Builder(this);
alert.setTitle("Alert");
alert.setMessage("Flaq");
alert.setPositiveButton("OK", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
synchronized(g)
{
Log.d("Threads", "g.notifyAll");
g.notifyAll();
}
}
});
alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
synchronized(g)
{
Log.d("Threads", "g.notifyAll");
g.notifyAll();
}
}
});
alertDialog = alert.create();
}
}
答案 0 :(得分:1)
而不是Java的Thread
和Runnable
方法,您应该使用Android的AsyncTask
,它可以帮助您更简单地通过重写onPreExecute和onPostExecute方法来处理前后的事情在后台运行代码。
This post有一个使用AsyncTask类的好例子。