0

ここにあるのは私のコードです。例外が発生し、解決できません。助けてください。webservice.calculating howmany ship gateout for today with using gateOut method

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;
        }

    }
}

例外はこちら

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
4

3 に答える 3

0

あなたのサービスはあなたのリクエストから何も返さないようです。おそらく、SOAP リクエストが正しいことを確認する必要があります。

于 2012-08-23T09:09:14.583 に答える
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);
}

これが null ポインター例外を生成する唯一の理由は、"bodyIn" (内部変数) が null であることです。この変数は、そのオブジェクトの parseBody() メソッドまたは parseXml() で初期化されます。したがって、getResponse(); を正常に実行する前に、これを最初に呼び出す必要があります。

または: この部分があなたによって維持されている場合...変数「bodyIn」は、オブジェクトのライフサイクルの他の場所で初期化する必要があります。

于 2012-08-23T09:14:26.127 に答える