0

Azure 모바일 서비스에서 맞춤 API를 호출하려고합니다. 나는 그것을 성공적으로 설정했기 때문에 내 애플 리케이션에서 성공적으로 해냈다. 그러나이 경우 모바일 서비스 SDK 내에서 Null Pointer Exception이 발생하므로 정확히 왜 발생 하는지를 추적하는 데 문제가 있습니다. (Android 용 모바일 서비스 1.1.5 사용)Android Azure invokeApi가 null 포인터 예외를 얻음

Azure의 로그는 서버 스크립트가 성공적으로 실행되고 있음을 나타냅니다. 여기

  } else { 
       console.log("no match"); 
       response.send(204, results); //No Match 
      } 

내 안드로이드 응용 프로그램에서 invokeApi 코드 것 : 여기에 데이터를 반환 있어요 스크립트 코드의 조각이다

mClient.invokeApi("data/check","GET",params,new ApiJsonOperationCallback() { 
     @Override 
     public void onCompleted(JsonElement jsonObject, Exception exception, ServiceFilterResponse response) { 
      Logg.d("onCompleted called successfully"); 
      if (exception != null) { 
       if (response.getStatus().getStatusCode() == RESULT_OK) { //Item Already Exists 
        Logg.d("Match! Item Already Exists."); 

       } else if (response.getStatus().getStatusCode() == 206) { //Chain Match or partial chain match 
        Logg.d("Chain Match or partial Chain Match"); 
       } else if (response.getStatus().getStatusCode() == 204) { //No match, request ok 
        Logg.d("No match found"); 
       } else { 
        Logg.e("Azure exception: " + exception.getCause().getMessage()); 
        result = RESULT_CANCELED; 
       } 
      } 
     } 
    }); 

는 그리고 여기에 오류 스택입니다 :

12-27 08:39:21.497 13234-13234/com.farmsoft.lunchguru.app.debug W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x417b3da0) 
12-27 08:39:21.537 13234-13234/com.farmsoft.lunchguru.app.debug E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: com.farmsoft.lunchguru.app.debug, PID: 13234 
    java.lang.NullPointerException 
      at java.io.StringReader.<init>(StringReader.java:47) 
      at com.google.gson.JsonParser.parse(JsonParser.java:45) 
      at com.microsoft.windowsazure.mobileservices.MobileServiceClient$5.onResponse(MobileServiceClient.java:708) 
      at com.microsoft.windowsazure.mobileservices.MobileServiceClient$6.onPostExecute(MobileServiceClient.java:825) 
      at com.microsoft.windowsazure.mobileservices.MobileServiceClient$6.onPostExecute(MobileServiceClient.java:1) 
      at android.os.AsyncTask.finish(AsyncTask.java:632) 
      at android.os.AsyncTask.access$600(AsyncTask.java:177) 
      at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:146) 
      at android.app.ActivityThread.main(ActivityThread.java:5487) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:515) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099) 
      at dalvik.system.NativeStart.main(Native Method) 

그것은 것으로 보인다 로그 호출이 logcat 출력에 반영되지 않았기 때문에 전에 onCompleted가 호출되기 전에 오류가 발생했습니다. 나는 이것이 왜 그런지에 대한 손실에 완전히 빠져 있습니다.

+0

스택 추적을 기반으로하면 204 개의 응답 처리 - 응답 내용이없는 Android SDK의 버그처럼 보입니다. 나는이 문제를 해결하기 위해 상태 코드를 204에서 200으로 변경할 수 있다고 생각합니다. – carlosfigueira

+0

흠 - 200으로 전환하면 오류없이 실행됩니다. 상태 코드를 사용하여 응용 프로그램에 결과 유형을 알리고 싶습니다. 발견 된 (또는 아닙니다). 감사! 그 것을 답으로 추가 하시겠습니까? Azure에 버그를보고 할 곳이 있습니까? BTW 사실 나는 Azure와의 어떤 성공도 귀하의 블로그 때문입니다. 그래서 나는 진심으로 감사드립니다! – Scott

+0

응답 내용이 jsonObject 매개 변수를 통해 전달되지는 않지만 Azure가 821과 같은 비표준 상태 코드를 사용할 때 오류를 반환하지 않음 *을 발견했습니다. 응답 가능한 임시 해결책 인 response.getContent()를 통해 수동으로 액세스 할 수 있습니다. – Scott

답변

0

스택 추적을 기반으로하면 안드로이드 SDK (204 응답 처리 - 응답 내용 없음)의 버그처럼 보입니다. 나는이 문제를 해결하기 위해 상태 코드를 204에서 200으로 변경할 수 있다고 생각합니다.

이 문제에 대해서는 https://github.com/Azure/azure-mobile-services/issues에 버그를 제출할 수 있습니다. 귀하의 의견에 따르면, 응답은 200 개의 응답에 대해서만 올바르게 분석되고있는 반면, 더 많은 데이터를 가질 수있는 다른 응답이있는 것으로 보입니다. 204를 사용한다는 것은 응답 본문 (정의에 따라 - http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.4 참조)이 없음을 의미하지만 다른 성공적인 상태 코드로 응답에 액세스 할 수 있어야합니다.

+0

나도 비슷한 문제가 있지만 204 상태 코드가 아니라 그 상태 코드를 사용하고 있지 않습니다. 여기에 내 질문을 게시 - http://stackoverflow.com/questions/27698480/azure-mobile-service-invokeapi-not-working-from-cordova-project – kkap

0

내 GET 요청과 동일한 문제가 발생했습니다. OnSuccess()에 항상 메서드 중단 점을 지정하면 null입니다.

REST 테스터가 작동하여 올바른 json back을 수신합니다. express 4를 사용하고 응답 코드를 200으로 변경하는 것을 포함하여 여러 가지 반환 방법을 시도했습니다.

관련 문제