[英]Android AsyncTask problem (connecting to a webservice)
所以我正在为应用程序进行登录活动,并且我想使用AsynTask连接到(SOAP)Web服务,我将向该Web服务发送密钥,用户名和密码,这将给我返回布尔结果是否用户是否有效。...在尝试AsyncTask之前,我使用的是在线找到的方法,在此方法中创建一个-caller类-扩展-Thread类-并在-MainActivity-内部使用while循环,从而使-UI线程进入睡眠状态,这很正常,但是感觉有点不正确,所以我调查了一下并发现了有关AsyncTask的信息,但我似乎无法使其正常工作……PS:由于属于该服务,因此我无法共享该Web服务的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;
}
}
}
我对此并不陌生,现在真的迷失了,因此我们非常感谢您的帮助/建议。
您需要移动此代码
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()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.