为什么Azure SQL查询会挂起我的应用程序?

时间:2015-04-15 02:43:16

标签: android azure azure-sql-database

我正在编写我的第一个使用Azure移动服务平台的应用程序。我配置了一个SQL服务器,该表显示在Azure管理门户上。我已经手动向表中添加了一些条目,以确保服务器端没有任何错误。

我的问题在于,当我在桌面上执行查询时,我的应用程序挂起。这是我的代码:

public MUManager(Context con){
    context = con;
    try {
        Log.i("Counter", "Before mClient");
        mClient = new MobileServiceClient("https://blah.com","apikey",context);
        Log.i("Counter", "After mClient");
        muTable = mClient.getTable("table1",MUItem.class);

    } catch (MalformedURLException e) {
        Log.i("Counter", "MalformedURL");
        e.printStackTrace();
    }
    Log.i("Counter", "End of constructor");

}

现在,我对上述代码没有任何问题,但我也无法确认客户端是否实际连接到Azure移动服务。

以下是导致我的问题的代码。

public ArrayList<MU> getMUList() throws ExecutionException, InterruptedException {
    Log.i("Counter", "Start SQL");
    MobileServiceList<MUItem> resultList = muTable.where().field("fieldname").eq("fieldvalue").execute().get();

    Log.i("Counter", "SQL success!");
    ArrayList<MU> MUList = new ArrayList<>();
    Log.i("Counter", "MU Initialization successful!");
    for(MUItem m:resultList){
        Log.i("Counter", m.Name);
        MUList.add(getMUfromItem(m));
    }
    return MUList;
}

当我到达该行时,上面的代码会冻结:

    MobileServiceList<MUItem> resultList = muTable.where().field("fieldname").eq("fieldvalue").execute().get();

我没有收到任何错误,但我从未看到我的SQL成功!语句出现在日志中,应用程序冻结,好像有一个IO块或其他东西。

我认为我拥有所有必要的Gradle依赖项,它们是:

compile 'com.android.support:appcompat-v7:21.0.3'
compile 'com.microsoft.azure:azure-mobile-services-android-sdk:2.0.2-beta'
compile 'com.google.android.gms:play-services:6.5.87'
compile 'com.android.support:support-v4:21.0.3'
compile 'com.google.code.gson:gson:2.2.2'
compile 'com.google.guava:guava:18.0'

非常困惑,提前谢谢!

编辑: 我刚玩了一个游戏,发现它的get()函数导致代码挂起。我不知道为什么,但即使在插入命令上发出命令,它似乎也会导致挂起。我正在阅读为什么get()会导致挂起,但我却在努力寻找有价值的东西

编辑2: 所以我只是连接了我的手机,一个物理的Android设备,看看是否会在物理上发生同样的错误,就像它在模拟器中一样。我现在得到一个稍微冗长的输出,而不是我刚收到的app:

    getaddrinfo+,hn 30(0x736565722d696e),sn(),family 0,flags 4
    getaddrinfo-,err=8
    getaddrinfo+,hn 30(0x736565722d696e),sn(),family 0,flags 1024
    getaddrinfo-, 1
    getaddrinfo_proxy+
    getaddrinfo_proxy-,TEMP_FAILURE_RETRY

然后它继续挂起。这意味着什么?

1 个答案:

答案 0 :(得分:1)

我找到了解决这个问题的方法,实际上有点尴尬! 问题是我的权限条款要求Internet访问是在子句内!