这是我的代码的原型: -
class something extends Activity
{
protected void onCreate(Bundle savedInstanceState)
{
String str = objectofanotherthing.execute("").get();
}
class anotherthing extends AsyncTask
{
ProgressDialog Dialog;
protected void onPreExecute()
{
Dialog = ProgressDialog.show(context, "Progressing", "Working on it,");
}
protected String doInBackground(String... params)
{
...
}
protected void onPostExecute(Integer result)
{
Dialog.dismiss();
}
}
}
当我执行我的代码时,我的程序似乎停在ProgressDialog.show,没有崩溃没有错误。当我评论这部分时,程序执行正常。我不知道该怎么办。谁能帮我这个。提前谢谢。
答案 0 :(得分:2)
如果您使用get()
调用AsyncTask,则会阻止UI线程,您的应用可能会停止响应。取消get()
来电,只有execute()
。
objectofanotherthing.execute("");
这意味着现在你的执行是独立于UI线程完成的,所以你不能指望你的String能够保存任何有用的东西。要解决这个问题,请将AsyncTask作为Activity中的嵌套类(您的代码段已经执行此操作),让doInBackground()
返回一些有用的内容,并在onPostExecute()
中关闭对话框并设置您需要设置的内容。
嵌套类的替代方法是将Activity传递给AsyncTask或定义接口,但如果Task用于一个活动,则嵌套更容易。