0

KSOAPを使用するWebサービスを使用して、データベースに保存する詳細を送信しています。このコードは以前は完全に機能しており、変更はありませんでした。今は機能していません。助けてください。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;
        }
           }
        });
    }

}

ここに画像の説明を入力してください

4

2 に答える 2

2

アプリケーションが応答しないというエラーが発生する非常に単純な理由:メイン(UI)スレッドでWeb要求を行っています。Androidスレッドモデルには2つのルールがあります。1)メインスレッドを数秒以上ブロックしないでください。2)メインスレッドからUIを更新しないでください。あなたはそれらの最初の規則に違反しています。より長い操作を行うには、AsyncTaskの使用を検討する必要があります。

于 2012-07-11T01:41:14.853 に答える
1

httpTransport.call(SOAP_ACTION, envelope); UIスレッドでネットワーク呼び出しを行っています。別のスレッドでネットワーク経由でリソースにアクセスするなど、長時間実行されるすべてのタスクを実行する必要があります。[AsyncTask][1]APIは、これを簡単に実行できる便利なクラス呼び出しを提供します。

最も単純な形式では、AsyncTaskを拡張するクラスを作成してhttpTransport.call(SOAP_ACTION, envelope);から、そのdoInBackgroundメソッドに移動します。

于 2012-07-11T01:43:47.783 に答える