其他一切都正常,就是点击登录按钮以后,不能正常显示请稍等的对话框~~~~代码如下:
package com.phome;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;public class LoginActivity extends Activity implements Runnable {
Button loginButton;
EditText userName;
EditText password;
ProgressDialog dialog;
Handler handler;
boolean result=false;
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);        setContentView(R.layout.login); 
        
        loginButton=(Button)findViewById(R.id.signin_button);
        userName=(EditText)findViewById(R.id.username_edit);
        password=(EditText)findViewById(R.id.password_edit);
        //设置登录按钮的事件
        loginButton.setOnClickListener(
         new Button.OnClickListener()
         {
public void onClick(View v) {
//TODO 
Thread mThread=new Thread(LoginActivity.this);
dialog = ProgressDialog.show(LoginActivity.this, "提示", "请稍后......", true);
        handler = new Handler() {
         public void handleMessage(Message msg) {
         }
         };
        
mThread.start();

while(true)
{
if(!mThread.isAlive())
{
if(result)
{
Toast.makeText(LoginActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
//loginToBack();
}
else
{
Toast.makeText(LoginActivity.this, "用户信息错误", Toast.LENGTH_SHORT).show();
}
break;
}
}
}
    }
        );
    }

public boolean checkUser() {
String NameSpace = "http://tempuri.org/";
String MethodName = "CheckUser";
//String url = "http://192.168.6.201/WService/WebServices.asmx";
String url = "http://192.168.6.200/WService/WebServices.asmx";
String soapAction = NameSpace + MethodName;
int result = 0;
        try {
//step1 指定WebService的命名空间和调用的方法名
SoapObject request = new SoapObject(NameSpace, MethodName);        

//step2 设置调用方法的参数值,这里的参数名称最好和WebService一致
request.addProperty("_s_Username", userName.getText().toString());
request.addProperty("_s_Password", password.getText().toString());

//step3 生成调用WebService方法的SOAP请求信息,并指定SOAP的版本
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
 
//设置是否调用的是dotNet下的WebService
envelope.dotNet = true;
 
//必须,等价于envelope.bodyOut = request; 
envelope.setOutputSoapObject(request);

//step4 创建HttpTransportSE对象
HttpTransportSE ht = new HttpTransportSE(url);
 
//step5 调用WebService
Log.e("call", "call");
ht.call(soapAction, envelope);
Log.e("callend", "callend");
 
//step6 使用getResponse方法获得WebService方法的返回结果
if(envelope.getResponse()!=null){
SoapPrimitive response = (SoapPrimitive) envelope.getResponse();
result = Integer.parseInt(response.toString());
Log.e("result",String.valueOf(result));
}
} catch (Exception e) {
result=0;
}
if(result==1)
{
return true;
}
return false;
}

//跳转到后台处理界面
protected void loginToBack()
{
Intent intent = new Intent();
intent.setClass(LoginActivity.this, Test.class);
intent.putExtra("userName", userName.getText());
intent.putExtra("password", password.getText());
startActivity(intent);
}

public void quitPro()
    {
        Builder dialog=new AlertDialog.Builder(LoginActivity.this);
        dialog.setTitle("提示");
        dialog.setMessage("您确定退出客户端?");
        dialog.setPositiveButton("确定",
        new DialogInterface.OnClickListener()
        {
public void onClick(DialogInterface dialog, int which) {
LoginActivity.this.finish();
}
}
        );
        dialog.setNegativeButton("取消",
         new DialogInterface.OnClickListener()
        {
public void onClick(DialogInterface dialog, int which) {

}
}
        );
        dialog.show();
    }    //设置退出键
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(event.getKeyCode()==KeyEvent.KEYCODE_BACK)
{
quitPro();
return true;
}
return super.onKeyDown(keyCode, event);
} public void run() {

        result=checkUser();
dialog.dismiss();
}
}

解决方案 »

  1.   

    mThread.start();
    这一句写在handler= new Handler(){...}外面
      

  2.   

    额,这个是我把整个页面贴下来了,设置退出键是防止误按后直接退出
    run方法是启动进程thread.start执行的方法
      

  3.   

    Android 提供了一个异步任务的类……
      

  4.   

    handler你根本就没用上,可以删去,然后把ProgressDialog.show()放到Activity的构造方法里,因为你的activity是实现Runnable接口的,所以线程一启动,就会显示那个dialog,直到线程run方法中的代码执行结束,调用dismiss,dialog才会消失,像你这样写,ProgressDialog.show()方法不是在线程启动加载数据时就同时调用的
      

  5.   

    我把我的思路跟你说下,就是打比方你要建立一个登陆提示框的东西。
    1、在试图里创建状态变量 public static final int LOGIC_WAITE = 0;这个是作为登陆框显示
                            public static final int LOGIC_ING = 1;这个是作为显示“正在登陆,请稍后”
                            public static final int logicState = LOGIC_WAITE;默认为显示登陆框
                            private logicWaite  logicWaite; 创建一个登陆框类,单独编写
    2、然后在draw()函数里用switch(gameState){
                                               case LOGIC_WAITE:
                                               draw logicWaite();
                                               break;
                                               }
    3、在按钮函数里面也添加相应的gameWaite.ontouchEvent();
    不知道能不能看明白
      

  6.   

    handler = new Handler() {
    public void handleMessage(Message msg) {
    }
    };放到外面去。mThread.start();
    再dailog.show();
    然后在run方法里发送消息判断登入是否成功和取消dailog.dismiss();