yuqidi 2010-12-29 15:08
浏览 977
已采纳

showDialog为什么无法显示对话框?

当我把线程去掉的时候对话框就可以显示?
代码如下:

package org.yuqidi.hrsystem;

import static org.yuqidi.hrsystem.Util.*;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.os.Looper;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;
public class LoginActivity extends Activity {
CheckBox checkBox;
Button btLogin;
Button btReturn;
ProgressDialog pd;
Connector connector;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
checkBox=(CheckBox)findViewById(R.id.cbRemember);
btLogin=(Button)findViewById(R.id.btLogin2);
btLogin.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
pd = ProgressDialog.show(LoginActivity.this, "请稍候", "正在连接服务器...", true, true);
// try {
// Thread.sleep(5000);
login();
// } catch (InterruptedException e) {
// e.printStackTrace();
// }

        }
    });
    btReturn=(Button)findViewById(R.id.btReturn);
    btReturn.setOnClickListener(new View.OnClickListener(){
        Intent intent;
        public void onClick(View v) {
            android.os.Process.killProcess(android.os.Process.myPid()); 
            intent=new Intent(LoginActivity.this,org.yuqidi.hrsystem.indexActivity.class);
            startActivity(intent);
            finish();
        }
    });
}
public void login() {
    new Thread(){
        public void run() {
            Looper.prepare();
                try{
                    if(connector==null){
                    connector=new Connector(ADDRESS, PORT);
                    }
                    EditText etUid=(EditText)findViewById(R.id.etUid);
                    EditText etPwd=(EditText)findViewById(R.id.etPwd);
                    String uid=etUid.getEditableText().toString().trim();
                    String pwd=etPwd.getEditableText().toString().trim();
                    String message="<#LOGIN#>"+uid+"|"+pwd;
                    System.out.println(message);
                    connector.dout.writeUTF(message);
                    int serverMessage = connector.din.readInt();
                    pd.dismiss(); 
                    showDialog(serverMessage);
                    System.out.println("+++++++++1"+serverMessage);
                    if(serverMessage==0){
                        showDialog(serverMessage);
                        Looper.loop();
                        Looper.myLooper().quit();
                    }else{
                        System.out.println("+++++++++1"+serverMessage);
                        showDialog(2);
                        System.out.println("+++++++++1"+"serverMessage");
                    }

                }catch (Exception e) {
                    e.printStackTrace();
                }
            }
    }.start();
}
protected Dialog onCreateDialog(int id) {                   
    Dialog dialog = null;   
    Builder builder=null;
    switch(id){ 
    case 0:
        builder = new AlertDialog.Builder(this);
        builder.setIcon(R.drawable.app_icon);   
        builder.setMessage(R.string.loginfail);
        builder.setPositiveButton(R.string.btnOk, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {

            }
        });
        builder.setNegativeButton(R.string.btnCancel, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {

            }
        });
        dialog = builder.create();          
        break;
    case 1:
        builder = new AlertDialog.Builder(this);
        builder.setIcon(R.drawable.app_icon);       
        builder.setMessage(R.string.alertepl);  
        builder.setPositiveButton(R.string.btnOk, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {

            }
        });
        builder.setNegativeButton(R.string.btnCancel, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {

            }
        });
        dialog = builder.create();          
        break;
    case 2:
        builder = new AlertDialog.Builder(this);
        builder.setIcon(R.drawable.app_icon);   
        builder.setMessage(R.string.alertmng);
        builder.setPositiveButton(R.string.btnOk, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {

            }
        });
        builder.setNegativeButton(R.string.btnCancel, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {

            }
        });
        dialog = builder.create();          
        break;
    case 3:
        builder = new AlertDialog.Builder(this);
        builder.setIcon(R.drawable.app_icon);   
        builder.setMessage(R.string.empty);
        builder.setPositiveButton(R.string.btnOk, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {

            }
        });
        builder.setNegativeButton(R.string.btnCancel, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {

            }
        });
        dialog = builder.create();          
        break;
    default:
        break;
    }
    return dialog;  

}
protected void onDestroy() {
    if(connector != null){
        connector.sayBye();
    }
    super.onDestroy();
}

}

  • 写回答

2条回答 默认 最新

  • oushulianivan 2010-12-30 17:50
    关注

    建议放到Handler去处理,结合HandlerThread和Message.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 spring后端vue前端
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题