Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Azure SDK-当我尝试从blob存储加载某些内容时出现NullPointerException_Android_Azure_Azure Mobile Services - Fatal编程技术网

Android Azure SDK-当我尝试从blob存储加载某些内容时出现NullPointerException

Android Azure SDK-当我尝试从blob存储加载某些内容时出现NullPointerException,android,azure,azure-mobile-services,Android,Azure,Azure Mobile Services,我已经在Azure上创建了一个名为“assetcontainer”的容器 我按照示例创建了以下代码: CloudStorageAccount account = CloudStorageAccount.parse(BuildConfig.AzureConnectionString); mClient = account.createCloudBlobClient(); mAssetContainer = mClient.getContainerReference

我已经在Azure上创建了一个名为“assetcontainer”的容器

我按照示例创建了以下代码:

 CloudStorageAccount account = CloudStorageAccount.parse(BuildConfig.AzureConnectionString);
        mClient = account.createCloudBlobClient();
        mAssetContainer = mClient.getContainerReference("assetcontainer");


        // Download the blob
        // For each item in the container
        for (ListBlobItem blobItem : mAssetContainer.listBlobs()) {
            // If the item is a blob, not a virtual directory
            if (blobItem instanceof CloudBlockBlob) {
                // Download the text
                CloudBlockBlob retrievedBlob = (CloudBlockBlob) blobItem;

                try {
                    retrievedBlob.download(new FileOutputStream(mContext.getFilesDir() + "\\assets\\" + ((CloudBlockBlob) blobItem).getName()));
                }
                catch(Exception ex){}
            }
        }
当我尝试迭代listBlobs()时,收到以下异常:

我不确定这里会出什么问题。。。这是azure sdk的一个bug吗?

我从中找到了一个解决方案,它对我很有效

Android不允许在主线程中执行网络操作,因此您需要在异步任务中执行代码,如下所示:

private class MyTask extends AsyncTask<Void, Void, Void>{
 @Override
protected Void doInBackground(Void... params) {
    CloudStorageAccount account = CloudStorageAccount.parse(BuildConfig.AzureConnectionString);
    mClient = account.createCloudBlobClient();
    mAssetContainer = mClient.getContainerReference("assetcontainer");


    // Download the blob
    // For each item in the container
    for (ListBlobItem blobItem : mAssetContainer.listBlobs()) {
        // If the item is a blob, not a virtual directory
        if (blobItem instanceof CloudBlockBlob) {
            // Download the text
            CloudBlockBlob retrievedBlob = (CloudBlockBlob) blobItem;

            try {
                retrievedBlob.download(new FileOutputStream(mContext.getFilesDir() + "\\assets\\" + ((CloudBlockBlob) blobItem).getName()));
            }
            catch(Exception ex){}
        }
    }
}
}
私有类MyTask扩展了AsyncTask{
@凌驾
受保护的Void doInBackground(Void…参数){
CloudStorageAccount=CloudStorageAccount.parse(BuildConfig.AzureConnectionString);
mClient=account.createCloudBlobClient();
mAssetContainer=mClient.getContainerReference(“资产容器”);
//下载blob
//对于容器中的每个项目
对于(ListBlobItem blobItem:mAssetContainer.listBlobs()){
//如果项目是blob,而不是虚拟目录
if(CloudBlockBlob的blobItem实例){
//下载文本
CloudBlockBlob retrievedBlob=(CloudBlockBlob)blobItem;
试一试{
retrievedBlob.download(新文件输出流(mContext.getFilesDir()+“\\assets\\”+((CloudBlockBlob)blobItem.getName());
}
捕获(例外情况除外){}
}
}
}
}

然后在主线程中调用
newmytask().execute()

我最后也找到了这个!奇怪的是,文档中没有提到这一点,实际的错误有点难以找到@我们发布了新版本的库(0.3.1)来解决这个问题。您可以获取代码。您现在应该会收到正确的错误消息。我正在运行一个任务(在doInBackground()中),但仍然收到此错误。让我失望。
private class MyTask extends AsyncTask<Void, Void, Void>{
 @Override
protected Void doInBackground(Void... params) {
    CloudStorageAccount account = CloudStorageAccount.parse(BuildConfig.AzureConnectionString);
    mClient = account.createCloudBlobClient();
    mAssetContainer = mClient.getContainerReference("assetcontainer");


    // Download the blob
    // For each item in the container
    for (ListBlobItem blobItem : mAssetContainer.listBlobs()) {
        // If the item is a blob, not a virtual directory
        if (blobItem instanceof CloudBlockBlob) {
            // Download the text
            CloudBlockBlob retrievedBlob = (CloudBlockBlob) blobItem;

            try {
                retrievedBlob.download(new FileOutputStream(mContext.getFilesDir() + "\\assets\\" + ((CloudBlockBlob) blobItem).getName()));
            }
            catch(Exception ex){}
        }
    }
}
}