Azure移动服务 - 尝试执行表查询时,Android挂起

时间:2017-01-18 21:40:36

标签: android azure mobile azure-mobile-services

我创建了新的MobileServiceClient。我能够通过配置的身份提供程序登录并使表工作正常。

mUserLoginTable = mClient.getTable("User_Login", UserLogin.class);

当我尝试检查我的表中是否存在已登录的用户时会出现问题。

第一版:

mUserLoginTable.where().field("facebook_id").eq(_user.getUserId()).execute().get();

第二版:

public boolean ChekIfGoogeUserExists() throws ExecutionException, InterruptedException {
            AsyncTask<Void, Void, Boolean> task = new AsyncTask<Void, Void, Boolean>(){
                @Override
                protected Boolean doInBackground(Void... params) {
                    try {
                        List<UserLogin> result;
                    ListenableFuture<MobileServiceList<UserLogin>> future  = mUserLoginTable.where().field("google_id").eq(_user.getUserId()).execute();
                        return future.get().isEmpty();
                    } catch (Exception exception) {
                        return false;
                    }

                }
            };
           return  runAsyncTask(task).get();

    }

似乎没什么用,android只是挂起请求帮助!

我已经使用SqlServer在我的azure数据库中创建了User_Login表。然后我添加了Azure MobileService EasyTable&#34; User_Login&#34;名称。它正确地从数据库中找到并映射了User_Login表(列是自动添加的)。现在访问权限设置为匿名。

我在AppServiceEditor中为User_Login定义了读取函数:

var table = module.exports = require('azure-mobile-apps').table();
table.read(function (context) {
     return context.execute();
 });

(默认情况下已将其注释掉了,并且没有帮助)

1 个答案:

答案 0 :(得分:0)

有两个问题。 第一个我使用 .inputfield("facebook_id") 正确的似乎是 .inputfield(val("facebook_id")) 第二,我使用 .get()在主要的thresd上执行网络操作 它导致Android应用程序中的freeeze。谢谢你的帮助!