2014-10-07 24 views
0

我試圖設置從Android應用程序到SOAP WebService的連接,但每次在我的結果中出現錯誤錯誤時: 對象引用未設置爲一個Java對象的實例 這似乎是從服務器錯誤 - >SOAP Webservice call from Java gives "Object reference not set to an instance of an object"(JAVA)SOAP WebService錯誤對象引用未設置爲對象的實例

但是當我嘗試它throught網頁瀏覽器POST請求它工作得很好:)

此服務http://ws.cdyne.com/ip2geo/ip2geo.asmx?op=ResolveIP

private static String NAMESPACE = "http://ws.cdyne.com/"; 
private static String URL = "http://ws.cdyne.com/ip2geo/ip2geo.asmx"; 
private static String SOAP_ACTION = "http://ws.cdyne.com/"; 

public static String invokeHelloWorldWS(String name, String webMethName) { 
    String resTxt = null; 

    SoapObject request = new SoapObject(NAMESPACE, webMethName); 
    PropertyInfo sayHelloPI = new PropertyInfo(); 
    // Set name 
    sayHelloPI.setName("ipAddress"); 
    // Set Value 
    sayHelloPI.setValue("88.212.35.129"); 
    // Set dataType 
    sayHelloPI.setType(String.class); 
    // Add the property to request object 
    request.addProperty(sayHelloPI); 
    // Create envelope 
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
    envelope.dotNet = true; 
    // Set output SOAP object 
    envelope.setOutputSoapObject(request); 
    // Create HTTP call object 
    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 
    androidHttpTransport.debug = true; 
    try{ 
     // Invoke web service 
     androidHttpTransport.call(SOAP_ACTION+webMethName, envelope); //webMethName = "ResolveIP" 
     // Get the response 
     Log.d("a", androidHttpTransport.responseDump); 
     //SoapPrimitive response = (SoapPrimitive) envelope.getResponse(); 
     // Assign it to resTxt variable static variable 
     //resTxt = response.toString(); 
    }catch(Exception e){ 
     //Print error 
     e.printStackTrace(); 
    } 
} 

我花很多時間在谷歌,但我不能算出正確答案,爲什麼這個happend

//編輯 最後我得到它的權利... IDK的爲什麼,但我打發第二個參數是這樣的(我會重新使用舊屬性) :

sayHelloPI.setName("licenseKey"); 
sayHelloPI.setValue("some_key"); 
sayHelloPI.setType(String.class); 
request.addProperty(sayHelloPI); 

它不工作。但是,當我作出新的屬性對象時,它的工作原理:

PropertyInfo sayHelloPI1 = new PropertyInfo(); 
sayHelloPI1.setName("licenseKey"); 
sayHelloPI1.setValue("ds"); 
sayHelloPI1.setType(String.class); 
request.addProperty(sayHelloPI1); 

也許它幫助別人下次

+0

是你使用kso​​ap2? – Silverbaq 2014-10-07 22:07:12

+0

是的,我是我的朋友。我知道我可以s send發送從Android的POST請求(因爲從瀏覽器,這種方式工作),我應該工作,但我想發送它像普通肥皂信封 – 2014-10-07 22:08:06

回答

1

這是我用我自己的一些代碼 - 希望這將有助於你:

 // Initialize soap request + add parameters 
     SoapObject request = new SoapObject(getString(R.string.Namespace), 
       getString(R.string.Method_Name_GetStudentsByTeam)); 
     Log.d("GetStudentsByTeamTask", "SOAP request"); 

     // Use this to add parameters 
     request.addProperty("teamId", params[0]); 
     Log.d("GetStudentsByTeamTask", "id: " + params[0]); 

     // Declare the version of the SOAP request 
     SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
       SoapEnvelope.VER11); 
     Log.d("GetStudentsByTeamTask", 
       "Declared the version of the SOAP request"); 

     envelope.setOutputSoapObject(request); 
     envelope.dotNet = true; 
     Log.d("GetStudentsByTeamTask", "Setting som variables"); 
     try { 
      HttpTransportSE androidHttpTransport = new HttpTransportSE(
        getString(R.string.URL)); 
      Log.d("GetStudentsByTeamTask", "Instance the HttpTransportSE"); 

      // this is the actual part that will call the webservice 
      androidHttpTransport.call(
        getString(R.string.Soap_Action_GetStudentsByTeam), 
        envelope); 
      Log.d("GetStudentsByTeamTask", "Called the Webservice"); 

      // Get the SoapResult from the envelope body. 
      SoapObject result = (SoapObject) envelope.getResponse(); 
      Log.d("GetStudentsByTeamTask", "Got the Soapresult"); 

      if (result != null) { 
       // Do something with result 
       // success = true; 
       Log.d("GetStudentsByTeamTask", "set sucess boolean to true"); 

       for (int i = 0; i < result.getPropertyCount(); i++) { 

        PropertyInfo pi = new PropertyInfo(); 
        result.getPropertyInfo(i, pi); 
        Log.d("GetStudentsByTeamTask", 
          pi.name + " : " + result.getProperty(i)); 

        SoapObject obj = (SoapObject) result.getProperty(i); 

        Student student = new Student(); 

        student.address = obj.getProperty("Address").toString(); 

        student.city = obj.getProperty("City").toString(); 
        student.created = DateTime.parse(obj.getProperty(
          "Created").toString()); 
        student.dateOfBirth = DateTime.parse(obj.getProperty(
          "DateOfBirth").toString()); 
        student.email = obj.getProperty("Email").toString(); 
        student.firstname = obj.getProperty("FirstName") 
          .toString(); 
        student.id = Integer.parseInt(obj.getProperty("ID") 
          .toString()); 
        student.imageId = Integer.parseInt(obj.getProperty(
          "ImageID").toString()); 
        // SoapObject lastNameObject = (SoapObject) obj 
        // .getProperty("LastName"); 
        // 
        student.lastName = obj.getProperty("LastName") 
          .toString(); 

        student.phone = obj.getProperty("Mobile").toString(); 

        student.zipcode = obj.getProperty("PostalCode") 
          .toString(); 
        student.schoolId = Integer.parseInt(obj 
          .getPropertyAsString("SchoolId")); 
        student.teamId = Integer.parseInt(obj 
          .getPropertyAsString("TeamId")); 
        student.testStarted = Integer.parseInt(obj 
          .getPropertyAsString("TestsStarted")); 
        student.timeStamp = DateTime.parse(obj 
          .getPropertyAsString("TimeStamp")); 
        student.image = getImage(Integer.parseInt(obj 
          .getProperty("ImageID").toString())); 

        if (student.image == null) 
         student.image = BitmapFactory 
           .decodeResource(getResources(), 
             R.drawable.default_usericon); 

        MyApp.getController().addStudent(student); 
       } 

      } else { 
       // If fails 
       // success = false; 
       Log.d("GetStudentsByTeamTask", "set login boolean to false"); 
      } 
     } catch (Exception e) { 
      Log.d("GetStudentsByTeamTask", "FAILED! " + e.getMessage()); 
      e.printStackTrace(); 
     } 
+0

謝謝,但這是上述代碼(我的代碼):) – 2014-10-08 10:01:19

相關問題