2011-11-10 1 views
4

ksoap 사용하여 배열을 전달 할 수있다.Null 포인터 예외가 어렵다 내가 배열과 같이 정의

  11-10 15:22:50.496: WARN/System.err(295): java.lang.RuntimeException: Cannot serialize: [] 
      11-10 15:22:50.496: WARN/System.err(295):  at org.ksoap2.serialization.SoapSerializationEnvelope.writeElement(SoapSerializationEnvelope.java:629) 
      11-10 15:22:50.505: WARN/System.err(295):  at org.ksoap2.serialization.SoapSerializationEnvelope.writeProperty(SoapSerializationEnvelope.java:613) 
      11-10 15:22:50.515: WARN/System.err(295):  at org.ksoap2.serialization.SoapSerializationEnvelope.writeObjectBody(SoapSerializationEnvelope.java:582) 
      11-10 15:22:50.515: WARN/System.err(295):  at org.ksoap2.serialization.SoapSerializationEnvelope.writeObjectBody(SoapSerializationEnvelope.java:566) 
      11-10 15:22:50.515: WARN/System.err(295):  at org.ksoap2.serialization.SoapSerializationEnvelope.writeElement(SoapSerializationEnvelope.java:623) 
      11-10 15:22:50.515: WARN/System.err(295):  at org.ksoap2.serialization.SoapSerializationEnvelope.writeBody(SoapSerializationEnvelope.java:547) 
      11-10 15:22:50.515: WARN/System.err(295):  at org.ksoap2.SoapEnvelope.write(SoapEnvelope.java:192) 
      11-10 15:22:50.525: WARN/System.err(295):  at org.ksoap2.transport.Transport.createRequestData(Transport.java:74) 
      11-10 15:22:50.555: INFO/System.out(295): ----null 
      11-10 15:22:50.565: DEBUG/AndroidRuntime(295): Shutting down VM 
      11-10 15:22:50.565: WARN/dalvikvm(295): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 
      11-10 15:22:50.586: ERROR/AndroidRuntime(295): FATAL EXCEPTION: main 
      11-10 15:22:50.586: ERROR/AndroidRuntime(295): java.lang.NullPointerException 
      11-10 15:22:50.586: ERROR/AndroidRuntime(295):  at com.example.display.call2(display.java:200) 
      11-10 15:22:50.586: ERROR/AndroidRuntime(295):  at com.example.display$3.onClick(display.java:145) 
      11-10 15:22:50.586: ERROR/AndroidRuntime(295):  at android.view.View.performClick(View.java:2408) 

내 웹 : 여기

내가 널 포인터 예외가 아래 로그 캣에서 볼 무엇입니까 내 코드를 실행하면 그러나 ksoap 작업

public String[] call2() 
    { 
    SoapPrimitive responsesdata = null; 

    SoapObject request = new SoapObject(namespace, method_NAME);  
    request.addProperty("names",items); 

    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(); 

     SoapObject result = (SoapObject)envelope.bodyIn; 

     if(result != null) 
     { 
      System.out.println("SOAP response:\n\n" + result.getProperty(0).toString()); 

     } 


     System.out.println(" --- response ---- " + responsesdata); 

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

     System.out.println(" ----" + responsesdata); 
     String serviceResponse= responsesdata .toString(); 
     System.out.println(serviceResponse); 

     String[] temp; 
     String delimiter = ","; 
     temp= serviceResponse.split(delimiter); 

     return temp; 

} 

을 수행 내 안드로이드 코드의 방법입니다 서비스 코드 :

public class Service1 : System.Web.Services.WebService 
    { 
    [WebMethod] 

     public String getnames(String[] values) 
     { 

     try 
     { 

      using (SqlConnection myConnection = new SqlConnection(@"Data S ource=.\SQLEXPRESS;Initial Catalog=student;User ID=sa;Password=123")) 
      { 
       int count = 1; 
       int rows = 0; 

       myConnection.Open(); 
       foreach (string student in values) 
       { 
        count++; 
        using (SqlCommand myCommand = new SqlCommand()) 
        { 
         myCommand.Connection = myConnection; 
         myCommand.CommandText = "insert into record values(@pCount, @pStudent)"; 
         SqlParameter param = myCommand.CreateParameter(); 
         param.ParameterName = "@pCount"; 
         param.Value = count; 
         myCommand.Parameters.Add(param); 

         param = myCommand.CreateParameter(); 
         param.ParameterName = "@pSudent"; 
         param.Value = student; 

         rows = myCommand.ExecuteNonQuery(); 
        } 
       } 
      } 
     } 

     catch (Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
      return "an error occured"; 
     } 


     return "success"; 
     } 
    } 
} 
+0

이 줄 제거 System.out.println ("--- response ----"+ responddata); 다시 뛰려고 노력하십시오. – user370305

+0

@ user370305 : 나중에 제거됨, 응용 프로그램 강제 종료 모든 logcat은 위에 게시 된 모든 예외를 보여줍니다. –

+0

줄 200 : String serviceResponse = responsesdata .toString(); –

답변

2

알려진 문제는 K입니다. 안드로이드 용 SOAP2 라이브러리. 현재는 단순히 배열을 지원하지 않습니다. 문제 설명은 여기에 있습니다 :

http://code.google.com/p/ksoap2-android/issues/detail?id=19

타사 패치, 솔루션 및 예제는 여기에서 찾을 수 있습니다 :이 링크를

http://people.unica.it/bart/ksoap2-patch/

봐, 당신은 당신의 답을 찾을 수 있습니다 그.

감사합니다.

+0

은 "안녕하세요"에게 반환해야합니까? 메서드 호출 2의 반환 유형은 문자열이어야합니다? –

+0

예. 그랬습니다. 좋은 점은 내 응용 프로그램이 강제로 닫히지 않았지만 여전히 내 logcat 에서이 있어요 : http://pastie.org/2840948. 이것 좀 봐. –

+0

이것은 178 행입니다. androidHttpTransport.call (soap_ACTION, envelope); –

관련 문제