【问题标题】:Android AsyncTask problem (connecting to a webservice)Android AsyncTask 问题(连接到 web 服务)
【发布时间】:2019-02-08 21:05:52
【问题描述】:

所以我正在处理应用程序的登录活动,并且我想使用 AsynTask 连接到(SOAP)Web 服务,我将向 Web 服务发送一个密钥、用户名和密码,这将给我一个回报用户是否有效的布尔结果......在尝试 AsyncTask 之前,我使用的是我在网上找到的方法,在该方法中,您创建了一个 -caller 类 - 扩展了 -Thread 类 - 并在 -MainActivity- 中使用了一个 while 循环,这使得-UI Thread sleeps-,它正在工作,但感觉有点不正确,所以我调查了它并发现了 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;
    }
}

}

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

【问题讨论】:

    标签: java android web-services android-asynctask


    【解决方案1】:

    您需要移动此代码

                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()

    【讨论】:

    • 好吧,即使我每次尝试登录时都会出错,但它似乎正在工作,在我点击按钮后它不会像以前那样立即显示吐司,所以我认为这是一个签署它运行 doInBackground() 中的实际代码,也许我有一些逻辑问题。无论如何,非常感谢你的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-03
    相关资源
    最近更新 更多