我正在编写Android应用程序我正在获得异常,我无法解决

时间:2012-08-23 09:06:19

标签: android

HEREİS我的代码我得到例外,我无法解决请帮助我我正在尝试用webservice.calculating如何使用gateOut方法今天如何使用船舶网关

package com.example.marport;

import java.io.IOException;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.SoapFault;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class LimanBilgileri extends Activity
{
    /** Called when the activity is first created. */


    final static String NAMESPACE = "http://webservice.marport.dcat.com/";
    // Web servis üzerinde hangi metodu kullanacağımızı ayarlıyoruz.
    final static String METHOD_NAME = "gateOut";
    // SOAP_ACTION : NAMESPACE ve METHOD_NAME birleşiminden oluşuyor.
    final static String SOAP_ACTION = "http://webservice.marport.dcat.com/gateOut";
    // Son olarak Web servise ait URL tanımlamasını burada yapıyoruz.
    final static String URL = "192.168.1.164:8070/test/services/MarportWebServicePort";

    private TextView sonuc;
    private EditText deger;
    private Button hesapla;
    private TextView debug;


    public void onCreate(Bundle savedInstanceState)
    {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.limanbilgileri);
       debug=(TextView)findViewById(R.id.textView3);

       deneme den=new deneme();
       den.execute();






}

    public class deneme extends AsyncTask<String, String, String>{
        private final ProgressDialog dialog = new ProgressDialog(LimanBilgileri.this);

        String result=null; 
        protected void onPostExecute(String unused) {

          this.dialog.dismiss();
            debug.setText("sonuc " +unused);
       }
        protected void onPreExecute() {
            this.dialog.setMessage("Yükleniyor...");
            this.dialog.show();


          }
        @Override
        protected String doInBackground(String... params) {
            // TODO Auto-generated method stub

            SoapObject Request=new SoapObject(NAMESPACE,METHOD_NAME);
              //Request.addProperty();
              SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
              soapEnvelope.dotNet=false;
              soapEnvelope.setOutputSoapObject(Request);
              HttpTransportSE aht=new HttpTransportSE(URL);
              try {
                aht.call(SOAP_ACTION, soapEnvelope);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (XmlPullParserException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
              try {
                 result= soapEnvelope.getResponse().toString();

            } catch (SoapFault e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            return result;
        }

    }
}

HEREİSEXCEPTİON

08-16 12:43:42.867: E/AndroidRuntime(2892): FATAL EXCEPTION: AsyncTask #1
08-16 12:43:42.867: E/AndroidRuntime(2892): java.lang.RuntimeException: An error occured while executing doInBackground()
08-16 12:43:42.867: E/AndroidRuntime(2892):     at android.os.AsyncTask$3.done(AsyncTask.java:299)
08-16 12:43:42.867: E/AndroidRuntime(2892):     at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
08-16 12:43:42.867: E/AndroidRuntime(2892):     at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
08-16 12:43:42.867: E/AndroidRuntime(2892):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
08-16 12:43:42.867: E/AndroidRuntime(2892):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
08-16 12:43:42.867: E/AndroidRuntime(2892):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
08-16 12:43:42.867: E/AndroidRuntime(2892):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
08-16 12:43:42.867: E/AndroidRuntime(2892):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
08-16 12:43:42.867: E/AndroidRuntime(2892):     at java.lang.Thread.run(Thread.java:856)
08-16 12:43:42.867: E/AndroidRuntime(2892): Caused by: java.lang.NullPointerException
08-16 12:43:42.867: E/AndroidRuntime(2892):     at org.ksoap2.serialization.SoapSerializationEnvelope.getResponse(SoapSerializationEnvelope.java:552)
08-16 12:43:42.867: E/AndroidRuntime(2892):     at com.example.marport.LimanBilgileri$deneme.doInBackground(LimanBilgileri.java:90)
08-16 12:43:42.867: E/AndroidRuntime(2892):     at com.example.marport.LimanBilgileri$deneme.doInBackground(LimanBilgileri.java:1)
08-16 12:43:42.867: E/AndroidRuntime(2892):     at android.os.AsyncTask$2.call(AsyncTask.java:287)
08-16 12:43:42.867: E/AndroidRuntime(2892):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
08-16 12:43:42.867: E/AndroidRuntime(2892):     ... 5 more

3 个答案:

答案 0 :(得分:0)

听起来您的服务不会从您的请求中返回任何内容。也许你应该确保你的SOAP请求是正确的。

答案 1 :(得分:0)

此处生成异常:

result= soapEnvelope.getResponse().toString();

可能你在那条线之前做错了什么。例如。 soapEnvelope可能未正确初始化。或者必须先执行请求?

更确切地说,错误发生在 SoapSerializationEnvelope.java:552 (由上面的此调用执行)。但是,由于您没有发布此文件,我们无法检查。

---编辑---

我在这里找到了这个文件的一个版本:http://code.google.com/p/salesforceandroid/source/browse/trunk/SalesforceAndroid/src/org/ksoap2/serialization/SoapSerializationEnvelope.java?r=93;似乎是该文件的不同版本(因为没有行号552);但是有一个方法getResonse():

public Object getResponse() throws SoapFault {
    if (bodyIn instanceof SoapFault) {
        throw (SoapFault) bodyIn;
    }
    KvmSerializable ks = (KvmSerializable) bodyIn;
    return ks.getPropertyCount() == 0 ? null : ks.getProperty(0);
}

这应该产生空指针异常的唯一原因是“bodyIn”(内部变量)为null。该变量在parseBody()方法或该对象的parseXml()中初始化。因此,在成功执行getResponse();

之前,必须首先调用此方法

OR:如果这部分由你维护......变量“bodyIn”必须在对象生命周期的其他地方初始化。

答案 2 :(得分:-1)

对我而言,也许这会有所帮助:

if (android.os.Build.VERSION.SDK_INT > 9) 
{
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);
}

请参阅Android http connection exception