Xamarin C# android 和 PARSE - 在 parseObject 中下载 parseFile

Posted

技术标签:

【中文标题】Xamarin C# android 和 PARSE - 在 parseObject 中下载 parseFile【英文标题】:Xamarin C# android and PARSE - Downloading a parseFile inside a parseObject 【发布时间】:2014-12-05 13:00:21 【问题描述】:

我之前发过一篇文章,询问如何在此处将 .3gpp 音频文件发送到解析云: Xamarin C# android - converting .3gpp audio to bytes & sending to parseObject

我已经成功地做到了这一点,在 parse 的数据管理器上,我可以单击文件的链接并成功播放从我的 android 设备发送的声音。 下面是上传数据到云端的代码:

async Task sendToCloud(string filename)
    

        ParseClient.Initialize ("Censored Key", "Censored Key");
        string LoadPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData);
        string savetheFile = sName + ".3gpp";
        string tempUserName;
        LoadPath += savetheFile;
        Console.WriteLine ("loadPath:  " + LoadPath);
        try
        

            byte[] data = File.ReadAllBytes(LoadPath);
            ParseFile file = new ParseFile(savetheFile, data);
            await file.SaveAsync();

            var auidoParseObject = new ParseObject("AudioWithData");
            //Console.WriteLine(ParseUser.getUserName());
            if (ParseUser.CurrentUser != null)
            
                tempUserName = ParseUser.CurrentUser.Username.ToString();
            

            else
                tempUserName = "Anonymous";
            
            //tempUserName = ParseUser.CurrentUser.Username.ToString();
            Console.WriteLine("PARSE USERNAME: " + tempUserName);

                auidoParseObject["userName"] = tempUserName;


            auidoParseObject["userName"] = tempUserName;
            auidoParseObject["file"] = file;
            await auidoParseObject.SaveAsync();

        

        catch (Exception e) 
        
            Console.WriteLine("Failed to await audio object! 0" + e);
        

    

如您所见,我正在发送一个名为“AudioWithData”的 ParseObject。 该对象包含两个孩子: - 上传文件的用户名(字符串) - 名为“file”的 parseFile(它有以下两个子项) ---SaveTheFile(包含音频文件名称的字符串,由用户输入,末尾添加 .3gpp 扩展名,例如“myAudioFile.3gpp” ---data(这包含音频文件的字节)

我需要能够将文件下载到我的安卓设备上,并通过媒体播放器对象播放。

我已经检查了解析网站上的文档,但我没有设法做到这一点: (请原谅我的伪查询语法) SELECT(音频文件)FROM(parseObject)WHERE(用户名=当前用户) 然后,我最终想将所有这些文件放入一个列表视图中,当用户单击该文件时,它会播放音频。

我尝试了以下方法,但我真的不知道我在用它做什么......

async Task RetrieveSound(string filename)
    
        ParseClient.Initialize ("Censored key", "Censored key");
        Console.WriteLine ("Hit RetrieveSound, filename = " + filename);
        string username;
        var auidoParseObject = new ParseObject("AudioWithData");
        if (ParseUser.CurrentUser != null) 
            username = ParseUser.CurrentUser.Username.ToString ();
         else 
            username = "Anonymous";
        
        string cloudFileName;
        Console.WriteLine ("username set to: " + username);


        var HoldThefile = auidoParseObject.Get<ParseFile>("audio");

        //fgher
        var query = from audioParseObject in ParseObject.GetQuery("userName")
                where audioParseObject.Get<String>("userName") == username
            select file;
        IEnumerable<ParseFile> results = await query.FindAsync();

        Console.WriteLine ("passed the query");
        //wfojh

        byte[] data = await new HttpClient().GetByteArrayAsync(results.Url);
        Console.WriteLine ("putting in player...");
        _player.SetDataSourceAsync (data);
        _player.Prepare;
        _player.Start (); 

任何帮助将不胜感激!即使是正确方向的一点也很棒! 谢谢!

编辑--

我实际上在以下几行中遇到了查询错误 (由于我的声誉,我无法发布图片 - 我无法访问我的主 *** 帐户:/) 图片链接在这里:

第一个错误:http://i.stack.imgur.com/PZBJr.png 第二个错误:http://i.stack.imgur.com/UkHvX.png 有任何想法吗?解析文档对此含糊不清。

【问题讨论】:

【参考方案1】:

此行将返回结果集合

IEnumerable<ParseFile> results = await query.FindAsync();

您要么需要使用foreach 遍历它们,要么只选择第一个

// for testing, just pick the first one
if (results.Count > 0) 

  var result = results[0];

  byte[] data = await new HttpClient().GetByteArrayAsync(result.Url);

  File.WriteAllBytes(some_path_to_a_temp_file, data);

  // at this point, you can just initialize your player with the audio file path and play as normal


【讨论】:

我会在我的笔记本电脑上试一试。谢谢 嗨,Jason,感谢您的回复,但实际上我的查询本身出现了错误,请在原始帖子底部查看我的编辑。我已经将错误快照到图像中,但是由于我的声誉点,我无法直接在此处发布图像。

以上是关于Xamarin C# android 和 PARSE - 在 parseObject 中下载 parseFile的主要内容,如果未能解决你的问题,请参考以下文章

用 C# (Xamarin) 编写 Android 应用程序 [关闭]

C#使用Xamarin开发Android应用程序 -- 系列文章

Xamarin C# android 和 PARSE - 在 parseObject 中下载 parseFile

C# Xamarin For Android自动升级项目实战

活动之间的动画 Android c# Xamarin

Xamarin Android C# 中的进度条和线程