首页 文章

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

提问于
浏览
0

我正在编写我的第一个使用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()导致挂起,但我很难找到任何有 Value 的东西

编辑2:所以我只是连接我的手机,一个物理的Android设备,看看是否会在物理上发生相同的错误,就像它在模拟器中一样 . 我现在得到一个稍微冗长的输出,而不是挂起的应用程序我收到以下内容:

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 回答

  • 1

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

相关问题