Java Android异步任务问题(连接到Web服务)

Java Android异步任务问题(连接到Web服务),java,android,web-services,android-asynctask,Java,Android,Web Services,Android Asynctask,因此,我正在为一个应用程序进行登录活动,我想使用AsynTask连接到一个(SOAP)web服务,我将向web服务发送一个密钥、用户名和密码,以返回一个布尔结果,无论用户是否有效。。。。在尝试AsyncTask之前,我使用了一个我在网上找到的方法,在其中创建一个-caller类-扩展-Thread类-并在-MainActivity内使用while循环-使-UI线程休眠-,它工作了,但感觉有点不正确,所以我研究了它并找到了AsyncTask,但我似乎无法使它工作。。。PS:我不能分享网站服务的ur

因此,我正在为一个应用程序进行登录活动,我想使用AsynTask连接到一个(SOAP)web服务,我将向web服务发送一个密钥、用户名和密码,以返回一个布尔结果,无论用户是否有效。。。。在尝试AsyncTask之前,我使用了一个我在网上找到的方法,在其中创建一个-caller类-扩展-Thread类-并在-MainActivity内使用while循环-使-UI线程休眠-,它工作了,但感觉有点不正确,所以我研究了它并找到了AsyncTask,但我似乎无法使它工作。。。PS:我不能分享网站服务的url,因为它属于我的大学,对此我很抱歉

public class LoginActivity extends AppCompatActivity {

Button loginButton;
EditText usernumber,password;
boolean result;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);
    getSupportActionBar().hide();

    loginButton = (Button) findViewById(R.id.loginButton);
    usernumber = (EditText) findViewById(R.id.userNum);
    password = (EditText) findViewById(R.id.userPass);

    loginButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            try {
                new CallLoginWS().execute();

                if(result == true){
                    Intent bEmpIntent = new Intent(LoginActivity.this,BasicEmployeeActivity.class);
                    startActivity(bEmpIntent);
                }else{
                    Toast.makeText(LoginActivity.this,"username or password incorrect",Toast.LENGTH_SHORT).show();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }

        }
    });

}

public class CallLoginWS extends AsyncTask<Void,Void,Void> {

    private final String SOAP_ACTION = "";
    private final String OPERATION_NAME = "IsValidUser";
    private final String WSDL_TARGET_NAMESPACE = "";
    private final String HOST = "";
    private final String FILE = "";
    private final String KEY = "";

    @Override
    protected Void doInBackground(Void... voids) {
        SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE,OPERATION_NAME);
        PropertyInfo pi=new PropertyInfo();
        pi.setName("usagekey");
        pi.setValue(KEY);
        pi.setType(String.class);
        request.addProperty(pi);
        pi = new PropertyInfo();
        pi.setName("username");
        pi.setValue(usernumber.getText().toString());
        pi.setType(String.class);
        request.addProperty(pi);
        pi = new PropertyInfo();
        pi.setName("password");
        pi.setValue(password.getText().toString());
        pi.setType(String.class);
        request.addProperty(pi);

        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        envelope.dotNet = true;
        envelope.setOutputSoapObject(request);

        HttpsTransportSE httpsTransport = new HttpsTransportSE(HOST,443,FILE,15000);

        SSLConnection ssl = new SSLConnection();
        ssl.allowAllSSL();
        try
        {
            httpsTransport.call(SOAP_ACTION, envelope);
            result = (boolean)envelope.getResponse();
        }
        catch (Exception exception)
        {
            exception.printStackTrace();
        }
        return null;
    }
}
公共类LoginActivity扩展了AppCompatActivity{
按钮登录按钮;
EditText用户号、密码;
布尔结果;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u登录);
getSupportActionBar().hide();
loginButton=(按钮)findViewById(R.id.loginButton);
usernumber=(EditText)findViewById(R.id.userNum);
密码=(EditText)findViewById(R.id.userPass);
loginButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
试一试{
新建CallLoginWS().execute();
如果(结果==真){
Intent bEmpIntent=newintent(LoginActivity.this,BasicEmployeeActivity.class);
起始触感(bEmpIntent);
}否则{
Toast.makeText(LoginActivity.this,“用户名或密码不正确”,Toast.LENGTH_SHORT.show();
}
}捕获(例外e){
e、 printStackTrace();
}
}
});
}
公共类CallLoginWS扩展了AsyncTask{
私有最终字符串SOAP_ACTION=“”;
私有最终字符串操作\u NAME=“IsValidUser”;
私有最终字符串WSDL_TARGET_NAMESPACE=“”;
私有最终字符串HOST=“”;
私有最终字符串文件=”;
私有最终字符串密钥=”;
@凌驾
受保护的空位背景(空位…空位){
SoapObject请求=新的SoapObject(WSDL\u目标\u命名空间、操作\u名称);
PropertyInfo pi=新的PropertyInfo();
pi.setName(“usagekey”);
pi.设定值(键);
pi.setType(String.class);
请求。添加属性(pi);
pi=新属性info();
pi.setName(“用户名”);
setValue(usernumber.getText().toString());
pi.setType(String.class);
请求。添加属性(pi);
pi=新属性info();
pi.setName(“密码”);
set值(password.getText().toString());
pi.setType(String.class);
请求。添加属性(pi);
SoapSerializationEnvelope=新的SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet=true;
envelope.setOutputSoapObject(请求);
HttpStranSports httpsTransport=新的HttpStranSports(主机,443,文件,15000);
SSLConnection ssl=新的SSLConnection();
ssl.allowAllSSL();
尝试
{
调用(SOAP_操作,信封);
结果=(布尔)envelope.getResponse();
}
捕获(异常)
{
异常。printStackTrace();
}
返回null;
}
}
}


我是新来的,现在真的迷路了,所以非常感谢您的帮助/建议。

您需要移动此代码

            if(result == true){
                Intent bEmpIntent = new Intent(LoginActivity.this,BasicEmployeeActivity.class);
                startActivity(bEmpIntent);
            }else{
                Toast.makeText(LoginActivity.this,"username or password incorrect",Toast.LENGTH_SHORT).show();
            }

要启动asynctask的onPostExecute()

即使每次尝试登录时我都会出错,但它似乎仍在工作,在我按下按钮后,它不会像以前那样立即显示toast,因此我认为这是它在doInBackground()中运行实际代码的迹象,也许我有一些逻辑问题。无论如何,非常感谢你的帮助。