【问题标题】:Webservice Calling Error in androidandroid中的Web服务调用错误
【发布时间】:2012-10-28 11:45:57
【问题描述】:

我正在尝试在 Android 中使用 ksoap2 调用基于 .net 的 WCF 服务。进行 httptransport 调用时出现以下错误。

这是我的代码:

public class MainActivity extends Activity {
EditText t1,t2;
Button b1;
TextView result;

private static final String NAMESPACE="http://tempuri.org/";
private static final String METHOD_NAME="AddEmployee";
private static final String URL="http://10.32.4.24/Android/AndroidBus.svc";
private static final String SOAP_ACTION="http://tempuri.org/IAndroidBus/AddEmployee";
SoapObject request=new SoapObject(NAMESPACE,METHOD_NAME);
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        t1=(EditText)findViewById(R.id.editText1);
        t2=(EditText)findViewById(R.id.editText2);
        result=(TextView)findViewById(R.id.textView1);
        b1=(Button)findViewById(R.id.button1);
        b1.setOnClickListener(new OnClickListener()
        {

            @Override
            public void onClick(View arg0) {
            PropertyInfo pi=new PropertyInfo();
            pi.setValue("abc");
            pi.setName("value1");
            //pi.type=PropertyInfo.STRING_CLASS;
            SoapObject Request=new SoapObject(NAMESPACE,METHOD_NAME);

            Request.addProperty(pi);

            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12);
            envelope.dotNet=true;
            envelope.setOutputSoapObject(Request);

             new servicecall(envelope).execute();



            }

        });
    }

    public class servicecall extends AsyncTask<String,Void,String>
    {
        String res;
        SoapSerializationEnvelope envelope;
        public servicecall(SoapSerializationEnvelope envelope)
        {
            this.envelope=envelope;
        }

        @Override
        protected String doInBackground(String... arg0) {
            HttpTransportSE ht=new HttpTransportSE(URL);
            ht.debug=true;  
            try
            {
                Log.d("WEBSERVICE","Calling");
               ht.call(SOAP_ACTION,envelope);
              SoapPrimitive response = (SoapPrimitive)envelope.getResponse();
              String dump=ht.responseDump.toString();
              System.out.println("dumppp"+dump);
               Log.d("Tag","Response"+response);
               res=response.toString();

            }
            catch(Exception e)
            {
                e.printStackTrace();

            }

            return res;
        }

        protected void onPostExecute(String res) {
            super.onPostExecute(res);
            result.setText("completed");

    }
    }

这是我得到的错误:

11-08 15:00:24.421: W/System.err(767): java.lang.NullPointerException
11-08 15:00:24.451: W/System.err(767):  at org.ksoap2.transport.ServiceConnectionSE.getResponseProperties(ServiceConnectionSE.java:85)
11-08 15:00:24.473: W/System.err(767):  at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:187)
11-08 15:00:24.483: W/System.err(767):  at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:114)
11-08 15:00:24.504: W/System.err(767):  at com.example.androidservice.MainActivity$servicecall.doInBackground(MainActivity.java:81)
11-08 15:00:24.522: W/System.err(767):  at com.example.androidservice.MainActivity$servicecall.doInBackground(MainActivity.java:1)
11-08 15:00:24.533: W/System.err(767):  at android.os.AsyncTask$2.call(AsyncTask.java:287)
11-08 15:00:24.541: W/System.err(767):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
11-08 15:00:24.661: W/System.err(767):  at java.util.concurrent.FutureTask.run(FutureTask.java:137)
11-08 15:00:24.671: W/System.err(767):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
11-08 15:00:24.685: W/System.err(767):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
11-08 15:00:24.711: W/System.err(767):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
11-08 15:00:24.722: W/System.err(767):  at java.lang.Thread.run(Thread.java:856)

【问题讨论】:

    标签: android wcf web-services


    【解决方案1】:

    请阅读这篇文章,它解释了你必须做的所有事情。您可以重新启动代码。有用。 http://insightforfuture.blogspot.com/2012/02/accessing-apache-axis2-web-service_24.html

    【讨论】:

      【解决方案2】:

      确保您收到的响应不为空。

          SoapPrimitive response = (SoapPrimitive)envelope.getResponse();
          if(null==response){ 
              return;
          }
          else{
              //continue processing
          }
      

      Working KSOAP code

      【讨论】:

      • 我尝试了你提到的方式,但我再次遇到同样的错误
      • 你有没有试过检查你得到的响应对象是否为空?
      • 在 HttpTransport 调用之后,我得到了空指针异常
      • ht.responseDump 为空,只需将我提供的这段代码放在此行之前,以确保您不会对空响应进行操作。这就是 NPE 的原因
      • 请发布带有行号的代码或至少在异常堆栈跟踪中指定的代码中标记行。似乎是一个简单的问题。
      【解决方案3】:

      只需在按钮单击时调用后台服务并更改 doInBackground 方法中的代码如下

                        SoapObject request = new SoapObject(NAMESPACE, methode);
              // Add the input required by web service
      
              request.addProperty("abc", value1);
      
      
      
              SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                      SoapEnvelope.VER11);
              envelope.dotNet = true;
      
              envelope.setOutputSoapObject(request);
      
              HttpTransportSE httpTransport = new HttpTransportSE(URL);
      
              httpTransport.call(Action, envelope);
      
              Object response = envelope.getResponse();
      
              Log.v("Responce", "Responce:::" + response.toString());
      
              result = response.toString();
      

      【讨论】:

        猜你喜欢
        • 2017-05-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多