如何在Android服务中验证Azure移动服务

时间:2014-08-03 16:25:31

标签: android azure-mobile-services

我按照authenticating in an Activity的说明进行操作,效果很好。

但我想在服务中进行身份验证。这不起作用,因为它需要在对话框中显示WebView,即使我已经过身份验证,对话框也会消失。

此处是堆栈跟踪,我的服务已替换为***

08-03 18:19:56.824  12259-12259/org.l6n.hn E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: org.l6n.hn, PID: 12259
    java.lang.RuntimeException: Unable to create service ***: java.lang.ClassCastException: *** cannot be cast to android.app.Activity
            at android.app.ActivityThread.handleCreateService(ActivityThread.java:2595)
            at android.app.ActivityThread.access$1800(ActivityThread.java:139)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1292)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5086)
            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:785)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.ClassCastException: *** cannot be cast to android.app.Activity
            at com.microsoft.windowsazure.mobileservices.LoginManager.showLoginUI(LoginManager.java:282)
            at com.microsoft.windowsazure.mobileservices.LoginManager.authenticate(LoginManager.java:143)
            at com.microsoft.windowsazure.mobileservices.MobileServiceClient.login(MobileServiceClient.java:230)
            at com.microsoft.windowsazure.mobileservices.MobileServiceClient.login(MobileServiceClient.java:214)
            at ***.authenticate(***.java:118)
            at ***.onCreate(***.java:47)
            at android.app.ActivityThread.handleCreateService(ActivityThread.java:2585)
            at android.app.ActivityThread.access$1800(ActivityThread.java:139)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1292)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5086)
            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:785)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
            at dalvik.system.NativeStart.main(Native Method)

1 个答案:

答案 0 :(得分:1)

如果您的用户已经过身份验证,则无需再次调用登录方法(这是尝试显示对话框的内容)。如果MobileServiceClient.getCurrentUser()方法返回有效用户,则只需在后台服务中进行调用即可。如果此时您没有有效用户,则必须在UI线程上显示对话框(即不在后台服务中),或者您可以对移动服务进行未经身份验证的呼叫。所以在小时后台服务中你可能想要这样的东西:

if (myMobileServiceClient.getCurrentUser() != null && myMobileServiceClient.getCurrentUser().getUserId() != "") {
    //do your background service calls to your Mobile Service
} else {
    //Fire something back to the UI thread to prompt a login and restart service
}