0

1 つの Android アプリケーションを開発する必要があります。

ここでは、次のコードを使用しています。

  public class MainActivity extends Activity {
  String status;
  EditText username,userPassword;
    SoapSerializationEnvelope envelope;
    private final String NAMESPACE = "http://pricealert.com";
    private final String URL = "http://192.168.2.102:8085/PriceAlert/services/Login?wsdl";
    private final String SOAP_ACTION = "http://pricealert.com/authentication";
    private final String METHOD_NAME = "authentication";
    private String uName;
    HttpTransportSE androidHttpTransport;
     /**Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

  username = (EditText) findViewById(R.id.tf_userName);
   userPassword = (EditText) findViewById(R.id.tf_password);

   Button login = (Button) findViewById(R.id.btn_login);
     login.setOnClickListener(new View.OnClickListener() {

   public void onClick(View arg0) {

      new LoginOperation().execute();

      }
     });
       }
      class LoginOperation extends AsyncTask<String, Void, String> {
      private ProgressDialog Dialog = new ProgressDialog(MainActivity.this);

      @Override
  protected String doInBackground(String... aurl) {
 // TODO Auto-generated method stub
    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
 username = (EditText) findViewById(R.id.tf_userName);
 String user_Name = username.getText().toString();
 userPassword = (EditText) findViewById(R.id.tf_password);
 String user_Password = userPassword.getText().toString();

 //Pass value for userName variable of the web service 
 PropertyInfo unameProp =new PropertyInfo();
 unameProp.setName("username");//Define the variable name in the web service method
 unameProp.setValue(user_Name);//set value for userName variable
 unameProp.setType(String.class);//Define the type of the variable
 request.addProperty(unameProp);//Pass properties to the variable it means 
 //Pass value for Password variable of the web service

 PropertyInfo passwordProp =new PropertyInfo();
 passwordProp.setName("password");
 passwordProp.setValue(user_Password);
 passwordProp.setType(String.class);
 request.addProperty(passwordProp);

  envelope = new SoapSerializationEnvelope(
         SoapEnvelope.VER12);
 envelope.setOutputSoapObject(request);
 androidHttpTransport = new HttpTransportSE(URL);
 runOnUiThread(new Runnable() {
     @Override
     public void run() {
 try{

        androidHttpTransport.call(SOAP_ACTION, envelope);
        SoapPrimitive response = (SoapPrimitive)envelope.getResponse();
        status = response.toString();
        TextView result = (TextView) findViewById(R.id.tv_status);
        result.setText(response.toString());

                  }
       catch(Exception e){
         }
     }
     });
     return null;
      }

     protected void onPreExecute() {
    Dialog.setMessage("Loading...");
    Dialog.show();
    }

    protected void onPostExecute(String resultGot) {
    Dialog.dismiss();
       }
       }
             }

Android 2.2にアプリケーションを追加する必要がある場合は、完全に機能し、成功と失敗の値を返します。

しかし、同じコードがAndroid 4.0バージョンで実行されているということは、(成功または失敗の)トーストメッセージが表示されず、logcateウィンドウでエラーが表示されなかったことを意味します??? 私のコードで何が問題なのですか??? これらの問題を解決するための解決策を教えてください???

4

1 に答える 1

1

UI スレッドで Web サービスを呼び出しています。これは厳格モード違反です。UI スレッドで DB またはネットワーク操作を実行しないでください。Android の新しいバージョンは、これに関してはるかに厳密であるため、他のバージョンで動作しています。デフォルトでは、doInBackground() のコードは別のスレッドで実行されるため、UI スレッドで何も実行する必要はありません。

呼び出し後に UI を更新するには、Handlerを使用します

于 2013-06-20T13:26:06.343 に答える