1

しばらくこれを試しましたが、適切な出力を取得できません。AndroidコードからWebサービスを呼び出す際に問題が発生します。私のWebサービスコードは、区切り文字「#」を間に挟んだ文字列を返します。次に、AndroidでWebサービスを呼び出すコードを作成する必要があります。ユーザーが選択するチェックボックスを使用して実際の名前が表示されるように、区切り文字を区切ります。

これが私のAndroidコードです:

    package com.sencide;

    import java.net.SocketException;
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.content.DialogInterface;
    import android.os.Bundle;
    import android.widget.TextView;
    import org.ksoap2.SoapEnvelope;
    import org.ksoap2.serialization.SoapObject;
    import org.ksoap2.serialization.SoapPrimitive;
    import org.ksoap2.serialization.SoapSerializationEnvelope;
    import org.ksoap2.transport.HttpTransportSE;


    public class TestApp extends Activity {

private static final String SOAP_ACTION = "http://tempuri.org/getData";

    private static final String METHOD_NAME = "getData";

    private static final String NAMESPACE = "http://tempuri.org/";
    private static final String URL = "http://10.0.2.2/login2/Service1.asmx";
    TextView tv;

boolean[] bln1=null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    tv=(TextView)findViewById(R.id.text1);


    String[] arr2= call();
    boolean[] bln = {false, false, false};

     bln1 = new boolean[arr2.length];


    new AlertDialog.Builder(TestApp.this)
    .setIcon(R.drawable.alert_dialog_icon)
    .setTitle("Title")
    .setMultiChoiceItems(arr2,
            bln,
            new DialogInterface.OnMultiChoiceClickListener() {
                public void onClick(DialogInterface dialog, int whichButton,
                        boolean isChecked) {


                    if(isChecked){
                        bln1[whichButton] = true;
                    }
                    else{
                        bln1[whichButton] = false;
                    }
                }
            })
      .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {


        }
      })
      .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {


        }
      })
     .show();


      }


      public String[] call()
     {
    SoapPrimitive responsesData = null; 

    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope( 
    SoapEnvelope.VER11); 
    envelope.dotNet = true; 
    envelope.setOutputSoapObject(request);

    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

    androidHttpTransport.debug = true; 

    try {

    androidHttpTransport.call(SOAP_ACTION, envelope);

    responsesData = (SoapPrimitive) envelope.getResponse(); 
    System.out.println(" --- response ---- " + responsesData); 

    } catch (SocketException ex) { 
    ex.printStackTrace(); 
    } catch (Exception e) { 
    e.printStackTrace(); 
    } 
    System.out.println( " ----" + responsesData );

    String serviceResponse= responsesData .toString(); 


    String[] temp; 
    String delimiter = "#"; 
    temp= serviceResponse.split(delimiter);
    System.out.println( " ---- length ---- " + temp.length); 

    return temp; 
    }


   }

コードを実行するたびに「アプリケーションが予期せず終了しました」というエラーが表示されるので、誰かが私の問題を解決するのを手伝ってくれませんか?

ありがとう

4

1 に答える 1

1

UIスレッドでWebサービスを呼び出しています。これは、Webサービスから応答を取得するまでUIスレッドがブロックされることを意味します。AndroidはモバイルOSであるため、パフォーマンスを向上させるためにブロックされたスレッドを終了します。

非同期タスクでWebサービス呼び出しを記述してみてください。非同期タスクを使用すると、バックグラウンドスレッドでWebサービス呼び出しを実行でき、UIスレッドがブロックされることはありません。

それはあなたの問題を解決するはずです。

于 2011-08-01T10:30:54.663 に答える