Android 警报对话框和异步任务
我试图在活动中使用警报对话框和异步任务,并得到以下错误 原因:java.lang.RuntimeException:无法在内部创建处理程序 尚未调用Looper.prepare()的线程 代码: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
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”