从Android

时间:2018-02-23 17:23:09

标签: android azure

我正在尝试创建一个移动应用,最终在其中一项活动中将连接到Android中的Blob存储以传输图像集。

但我甚至无法到达那里,因为其中一个要求是使连接安全,因为客户端可能是来自他的手机的任何人,所以我的第一步是在开始任何交易之前请求SAS令牌。

所以这基本上是我要遵循的两个步骤,

1 - >在我的App Service中实现了一个Azure函数,它返回一个SAS令牌(我从这里获得了这个函数:Sas Token Function

2 - >尝试从我的Android代码调用该函数并获取我的SAS令牌。

看起来非常简单,我确定它是,链接中的函数解释了要求具体访问所需的http主体,我认为在那里我失败了,下面是我调用函数的代码:

private void getStringFromAzure() throws MalformedURLException {
    JsonObject jsonObject = new JsonObject();
    jsonObject.addProperty("container", "uploadedimages");
    jsonObject.addProperty("permissions", "Write, Create");
    // Create the MobileService Client object and set your backend URL
    String yourURL = "https://mydirectory.azurewebsites.net/";
    MobileServiceClient mClient = new MobileServiceClient(yourURL, this);

    // Your query pointing to yourURL/api/values
    ListenableFuture<JsonElement> query = mClient.invokeApi("GetSasToken-Net", jsonObject, "POST", null);

    // Callback method
    Futures.addCallback(query, new FutureCallback<JsonElement>() {
        @Override
        public void onSuccess(JsonElement jsonElement) {


            final String result = jsonElement.toString();

            // Since you are on a async task, you need to show the result on the UI thread
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(mContext, result, Toast.LENGTH_LONG).show();
                }
            });
        }

        @Override
        public void onFailure(Throwable throwable) {
            Log.d(TAG, "onFailure: " + throwable.getMessage());
        }
    });
}

“InvokeApi”行功能中的代码失败,甚至在警告我将从移动设备连接到Internet之前抛出异常。

我认为可能错误的另一件事是,Azure Get Sas令牌功能中没有任何地方指定我的帐户凭据(我没有开发该功能,但应该可以正常工作,它无论如何都不会让你改变任何东西,通过GitHub导入)

我在这种事情上有很小的基础/背景,我确定我错过了某些东西(或者很多东西),但我真的很感激一只手,这让我发疯了。

PD。已在清单中提供Internet权限。

先谢谢大家,多年后继续在StackOverflow上发帖!

0 个答案:

没有答案