1

我已经尝试了一段时间,但我无法获得正确的输出。我在从我的 Android 代码调用 Web 服务时遇到问题。我的Web 服务代码返回一个中间有分隔符“#”的字符串。现在我需要在 Android 中编写一个调用 Web 服务的代码,分隔分隔符,以便使用复选框显示实际名称供用户选择

这是我的安卓代码:

    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 服务,这意味着 UI 线程被阻塞,直到您从 Web 服务获得响应。由于 Android 是一个移动操作系统,它会终止阻塞的线程以提高性能。

尝试在Async Task中编写 Web 服务调用。使用异步任务,您可以在后台线程中运行 Web 服务调用,并且您的 UI 线程不会被阻塞。

那应该可以解决您的问题。

于 2011-08-01T10:30:54.663 回答