Android 警报对话框和异步任务

Android 警报对话框和异步任务,android,android-asynctask,android-alertdialog,Android,Android Asynctask,Android Alertdialog,我试图在活动中使用警报对话框和异步任务,并得到以下错误 原因:java.lang.RuntimeException:无法在内部创建处理程序 尚未调用Looper.prepare()的线程 代码: public class loginTask extends AsyncTask<Void, Void, Void> { public ProgressDialog loginDialog = new ProgressDialog( LoginActivity

我试图在活动中使用警报对话框和异步任务,并得到以下错误

原因:java.lang.RuntimeException:无法在内部创建处理程序 尚未调用Looper.prepare()的线程

代码:

public class loginTask extends AsyncTask<Void, Void, Void> {
    public ProgressDialog loginDialog = new ProgressDialog(
            LoginActivity.this);

    @Override
    protected void onPreExecute() {
        loginDialog.setMessage("Please wait Logging in");
        loginDialog.show();
    }

    @Override
    protected Void doInBackground(Void... params) {

        if(loginUser()) {
            loginDialog.dismiss();
            alertbox("title", "winnn", "Okay");
        } else {
            loginDialog.dismiss();
            alertbox("title", "message", "Okay");
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void unused) {
        loginDialog.dismiss();
        Intent intentHome = new Intent(LoginActivity.this,
                HomeActivity.class);
        startActivity(intentHome);
    }
}
公共类登录任务扩展异步任务{
public ProgressDialog loginDialog=新建ProgressDialog(
后勤活动;
@凌驾
受保护的void onPreExecute(){
loginDialog.setMessage(“请等待登录”);
loginDialog.show();
}
@凌驾
受保护的Void doInBackground(Void…参数){
如果(登录用户()){
loginDialog.discouse();
alertbox(“标题”、“温恩”、“好”);
}否则{
loginDialog.discouse();
alertbox(“标题”、“消息”、“确认”);
}
返回null;
}
@凌驾
受保护的void onPostExecute(未使用的void){
loginDialog.discouse();
意向意向=新意向(LoginActivity.this,
家庭活动(课堂);
星触觉(intentHome);
}
}

您不能直接在
doInBackground()方法中更新UI。(如果仍要执行,请在
doInBackground()
中的
runOnUiThread()
方法中写入相同的命令)

否则,请在
onPostExecute()
方法中执行

public class loginTask extends AsyncTask<Void, Void, Void> 
{
    public ProgressDialog loginDialog = new ProgressDialog( LoginActivity.this );
    public Boolean flag;

    @Override
    protected void onPreExecute() {
        loginDialog.setMessage("Please wait Logging in");
        loginDialog.show();
    }

    @Override
    protected Void doInBackground(Void... params) {
        if(loginUser())
          flag = true;
        else 
          flag=false;

        return null;
    }

    @Override
    protected void onPostExecute(Void unused) {
        loginDialog.dismiss();

        if(flag)
          alertbox("title", "winnn", "Okay");
        else
          alertbox("title", "message", "Okay");
    }
}
公共类登录任务扩展异步任务
{
public ProgressDialog loginDialog=新建ProgressDialog(LoginActivity.this);
公共布尔标志;
@凌驾
受保护的void onPreExecute(){
loginDialog.setMessage(“请等待登录”);
loginDialog.show();
}
@凌驾
受保护的Void doInBackground(Void…参数){
如果(登录用户())
flag=true;
其他的
flag=false;
返回null;
}
@凌驾
受保护的void onPostExecute(未使用的void){
loginDialog.discouse();
国际单项体育联合会(旗)
alertbox(“标题”、“温恩”、“好”);
其他的
alertbox(“标题”、“消息”、“确认”);
}
}

您不能直接在
doInBackground()方法中更新UI。(如果仍要执行,请在
doInBackground()
中的
runOnUiThread()
方法中写入相同的命令)

否则,请在
onPostExecute()
方法中执行

public class loginTask extends AsyncTask<Void, Void, Void> 
{
    public ProgressDialog loginDialog = new ProgressDialog( LoginActivity.this );
    public Boolean flag;

    @Override
    protected void onPreExecute() {
        loginDialog.setMessage("Please wait Logging in");
        loginDialog.show();
    }

    @Override
    protected Void doInBackground(Void... params) {
        if(loginUser())
          flag = true;
        else 
          flag=false;

        return null;
    }

    @Override
    protected void onPostExecute(Void unused) {
        loginDialog.dismiss();

        if(flag)
          alertbox("title", "winnn", "Okay");
        else
          alertbox("title", "message", "Okay");
    }
}
公共类登录任务扩展异步任务
{
public ProgressDialog loginDialog=新建ProgressDialog(LoginActivity.this);
公共布尔标志;
@凌驾
受保护的void onPreExecute(){
loginDialog.setMessage(“请等待登录”);
loginDialog.show();
}
@凌驾
受保护的Void doInBackground(Void…参数){
如果(登录用户())
flag=true;
其他的
flag=false;
返回null;
}
@凌驾
受保护的void onPostExecute(未使用的void){
loginDialog.discouse();
国际单项体育联合会(旗)
alertbox(“标题”、“温恩”、“好”);
其他的
alertbox(“标题”、“消息”、“确认”);
}
}

onPreexecute和onPostExecute是异步任务中UI部分的一部分。。doInBackground是一个独立的线程,因此在doInBackground中完成的任何事情都需要以progressUpdate的形式进行处理

 private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
     protected Long doInBackground(URL... urls) {
         int count = urls.length;
         long totalSize = 0;
         for (int i = 0; i < count; i++) {
             totalSize += Downloader.downloadFile(urls[i]);
             publishProgress((int) ((i / (float) count) * 100));
         }
         return totalSize;
     }

     protected void onProgressUpdate(Integer... progress) {
         setProgressPercent(progress[0]);
     }

     protected void onPostExecute(Long result) {
         showDialog("Downloaded " + result + " bytes");
     }
 }
私有类下载文件任务扩展异步任务{
受保护的长doInBackground(URL…URL){
int count=url.length;
长totalSize=0;
for(int i=0;i
示例参考:


反映您需要在doInBackground进程之间对UI所做的任何更改

onPreexecute和onPostExecute是异步任务中UI部分的一部分。。doInBackground是一个独立的线程,因此在doInBackground中完成的任何事情都需要以progressUpdate的形式进行处理

 private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
     protected Long doInBackground(URL... urls) {
         int count = urls.length;
         long totalSize = 0;
         for (int i = 0; i < count; i++) {
             totalSize += Downloader.downloadFile(urls[i]);
             publishProgress((int) ((i / (float) count) * 100));
         }
         return totalSize;
     }

     protected void onProgressUpdate(Integer... progress) {
         setProgressPercent(progress[0]);
     }

     protected void onPostExecute(Long result) {
         showDialog("Downloaded " + result + " bytes");
     }
 }
私有类下载文件任务扩展异步任务{
受保护的长doInBackground(URL…URL){
int count=url.length;
长totalSize=0;
for(int i=0;i
示例参考:


反映您需要在doInBackground进程之间对UI所做的任何更改

“您无法更新doInBackground()方法内部的UI。”我们可以使用runOnUiThread()更新doInBackground()内部的UI。@LalitPoptani在您的评论之前的回答中已经提到:)@PareshMayani。。。如果我使用此代码,并且在显示对话框时更改方向,会发生什么情况?@Selvin这是另一个问题,因此您需要在AndroidManifest.xml文件内编写
android:configChanges=“orientation | keyboardHidden”
。“您不能在doInBackground()方法内更新UI。”我们可以在doInBackground()内更新使用runOnUiThread()。@LalitPoptani在您的评论之前的回答中已经提到:)@PareshMayani。。。如果我使用此代码,并且在显示对话框时更改方向,会发生什么情况?@Selvin这是另一个问题,因此您需要在AndroidManifest.x中编写
android:configChanges=“orientation | keyboardHidden”