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가 호출되기 전에 오류가 발생했습니다. 나는 이것이 왜 그런지에 대한 손실에 완전히 빠져 있습니다.
스택 추적을 기반으로하면 204 개의 응답 처리 - 응답 내용이없는 Android SDK의 버그처럼 보입니다. 나는이 문제를 해결하기 위해 상태 코드를 204에서 200으로 변경할 수 있다고 생각합니다. – carlosfigueira
흠 - 200으로 전환하면 오류없이 실행됩니다. 상태 코드를 사용하여 응용 프로그램에 결과 유형을 알리고 싶습니다. 발견 된 (또는 아닙니다). 감사! 그 것을 답으로 추가 하시겠습니까? Azure에 버그를보고 할 곳이 있습니까? BTW 사실 나는 Azure와의 어떤 성공도 귀하의 블로그 때문입니다. 그래서 나는 진심으로 감사드립니다! – Scott
응답 내용이 jsonObject 매개 변수를 통해 전달되지는 않지만 Azure가 821과 같은 비표준 상태 코드를 사용할 때 오류를 반환하지 않음 *을 발견했습니다. 응답 가능한 임시 해결책 인 response.getContent()를 통해 수동으로 액세스 할 수 있습니다. – Scott