应用程序无响应

时间:2012-07-11 01:38:15

标签: java android eclipse ksoap2

我正在使用KSOAP使用Web服务发送存储在数据库中的详细信息。此代码之前完美运行,我没有对其进行任何更改。现在它不起作用。请帮忙。我检查了网络服务,它的工作原理。我附上了日志猫的详细信息。请帮忙!!!

public class Registration extends Activity{
private static final String SOAP_ACTION = "http://tempuri.org/register";
private static final String OPERATION_NAME = "register";
private static final String WSDL_TARGET_NAMESPACE = "http://tempuri.org/";
private static final String SOAP_ADDRESS = "http://10.0.2.2:54714/WebSite1/Service.asmx";
Button sqlRegister, sqlView;

EditText  sqlFirstName,sqlLastName,sqlEmail,sqlMobileNumber,sqlCurrentLocation,sqlUsername,sqlPassword;

@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.registration);
sqlFirstName = (EditText) findViewById(R.id.etFname);
sqlLastName = (EditText) findViewById(R.id.etLname);
sqlEmail = (EditText) findViewById(R.id.etEmail);
sqlMobileNumber = (EditText) findViewById(R.id.etPhone);
sqlCurrentLocation = (EditText) findViewById(R.id.etCurrentLoc);

sqlUsername = (EditText) findViewById(R.id.etUsername);
sqlPassword = (EditText) findViewById(R.id.etPwd);

sqlRegister = (Button) findViewById(R.id.bRegister);

sqlRegister.setOnClickListener(new View.OnClickListener() {

    public void onClick(View v) {
        switch (v.getId()){
        case R.id.bRegister:

                String firstname = sqlFirstName.getText().toString();
                String lastname = sqlLastName.getText().toString();
                String emailadd = sqlEmail.getText().toString();
                String number = sqlMobileNumber.getText().toString();
                String loc = sqlCurrentLocation.getText().toString();
                String uname = sqlUsername.getText().toString();
                String pwd = sqlPassword.getText().toString();

                SoapObject Request = new SoapObject(WSDL_TARGET_NAMESPACE,OPERATION_NAME);
                Request.addProperty("fname", String.valueOf(firstname));
                Request.addProperty("lname", String.valueOf(lastname));
                Request.addProperty("email", String.valueOf(emailadd));
                Request.addProperty("num", String.valueOf(number));
                Request.addProperty("loc", String.valueOf(loc));
                Request.addProperty("username", String.valueOf(uname));
                Request.addProperty("password", String.valueOf(pwd));
                Toast.makeText(Registration.this, "You have been registered Successfully", Toast.LENGTH_LONG).show();

                SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
                envelope.dotNet = true;
                envelope.setOutputSoapObject(Request);
                HttpTransportSE httpTransport  = new HttpTransportSE(SOAP_ADDRESS);
                try
                {
                    httpTransport.call(SOAP_ACTION, envelope);
                    SoapObject response = (SoapObject)envelope.getResponse();
                    int result =  Integer.parseInt(response.getProperty(0).toString());
                    if(result == '1'){
                        Toast.makeText(Registration.this, "You have been registered Successfully", Toast.LENGTH_LONG).show();
                    }
                    else
                    {
                        Toast.makeText(Registration.this, "Try Again", Toast.LENGTH_LONG).show();
                    }
                }
                catch(Exception e)
                {
                   e.printStackTrace();
                }

            break;
        }
           }
        });
    }

}

enter image description here

2 个答案:

答案 0 :(得分:2)

您收到应用程序无响应错误的原因非常简单:您正在主(UI)线程上发出Web请求。 Android线程模型有两个规则:1)不要阻塞主线程超过几秒钟2)不要从主线程更新UI。您违反了第一条规则。您应该考虑使用AsyncTask来执行更长时间的操作。

答案 1 :(得分:1)

httpTransport.call(SOAP_ACTION, envelope); 您正在UI线程上进行网络调用。您需要执行所有长时间运行的任务,例如在单独的线程上通过网络访问资源。 API提供了一个便利类调用[AsyncTask][1],可以让您轻松完成此任务。

在最简单的形式中,您将创建一个扩展AsyncTask的类,然后将httpTransport.call(SOAP_ACTION, envelope);移动到其doInBackground方法。