Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.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
C# Xamarin Firebase DeleteAsync_C#_Firebase_Firebase Realtime Database_Xamarin.android - Fatal编程技术网

C# Xamarin Firebase DeleteAsync

C# Xamarin Firebase DeleteAsync,c#,firebase,firebase-realtime-database,xamarin.android,C#,Firebase,Firebase Realtime Database,Xamarin.android,我在Xamarin Android应用程序上从Firebase数据库中删除项目时遇到问题 我收到一个400(错误请求)错误 删除方法: private async void RemovePost(string ActivityID) { var firebase = new FirebaseClient(FirebaseURL); await firebase.Child("posts").Child(ActivityID).DeleteAsync(); var int

我在Xamarin Android应用程序上从Firebase数据库中删除项目时遇到问题

我收到一个400(错误请求)错误

删除方法:

private async void RemovePost(string ActivityID)
{
    var firebase = new FirebaseClient(FirebaseURL);
    await firebase.Child("posts").Child(ActivityID).DeleteAsync();

    var intent = new Intent(mContext, typeof(MyProfileActivity));
    mContext.StartActivity(intent);
}
型号:

public class Post
{
    public string ActivityID { get; set; }

    public string OwnerID { get; set; }

    public string ActivityTitle { get; set; }

    public string ActivitySport { get; set; }

    public DateTime ActivityDate { get; set; }

    public DateTime ActivityTime { get; set; }

    public string ActivityTown { get; set; }

    public string ActivityAddress { get; set; }

    public string ActivityPhone { get; set; }

    public string ActivityEmail { get; set; }

    public string ActivityDetails { get; set; }
}
Firebase数据库表:

请注意,我传递给
RemovePost
方法的活动id是“0”

这是:

await firebase.Child("posts").Child(ActivityID)
将尝试将ActivityID与节点的根相匹配,在您的情况下,它是值kig7ju8csdfg3esbin

尝试将firebase delete调用更改为以下内容:

await firebase.Child("posts").OrderBy("ActivityID").EqualTo(ActivityID).DeleteAsync();
更新

试试这个,这样你就可以调试了。设置一个断点,并运行调用以查看结果

//Get the record(s). Can be more than one if ActivityID value is repeated.
var posts = await firebase
    .Child("posts")
    .OrderBy("ActivityID")
    .EqualTo("0")
    .OnceAsync<Post>();

// Select only the first one
var firstPost = posts.FirstOrDefault();

// send to delete this
await firebase
    .Child("posts")
    .Child(firstPost?.Key)
    .DeleteAsync();
//获取记录。如果重复ActivityID值,则可以是多个。
var posts=等待火力基地
.儿童(“员额”)
.OrderBy(“活动ID”)
.EqualTo(“0”)
.OnceAsync();
//仅选择第一个
var firstPost=posts.FirstOrDefault();
//发送以删除此文件
等待火力基地
.儿童(“员额”)
.Child(firstPost?.Key)
.DeleteAsync();

那么,首先将记录保存到数据库时,为什么不将
活动ID
作为键呢

var post = new Post {
    ActivityId = 0,
    //...other properties populated
}

var record = await firebase
    .Child("posts")
    .Child(post.ActivityId)
    .PostAsync(post));

var posts = await firebase
    .Child("posts")
    .OnceAsync<Post>();

foreach (var item in posts) {
    Console.WriteLine($"{item.Key} post has id {item.Object.ActivityId}");
}

await firebase.Child("posts").Child(post.ActivityID).DeleteAsync();
var post=新的post{
ActivityId=0,
//…其他已填充的属性
}
var记录=等待firebase
.儿童(“员额”)
.Child(post.ActivityId)
.PostAsync(post));
var posts=等待火力基地
.儿童(“员额”)
.OnceAsync();
foreach(POST中的var项目){
WriteLine($“{item.Key}post的id为{item.Object.ActivityId}”);
}
等待firebase.Child(“posts”).Child(post.ActivityID).deleteSync();

这样,当查询记录时,您可以在已知的键上查询

这一行给了我一个新的错误:{System.Net.Http.HttpRequestException:400(错误请求)尝试先获取记录,不要执行删除部分
firebase.Child(“posts”).OrderBy(“ActivityID”).EqualTo(ActivityID)
并调试以查看您是否有权访问该记录。另外,请告诉我您使用的nuget软件包是什么我正在使用Firebase.Xamarin v0.3.6,当我使用该行时,我会得到一个Firebase.Xamarin.Database.Query.FilterQueryobject,我正在尝试深入研究它是否是我的post对象,但我一直找不到它yet@CathalO”唐纳说对帖子的更新,以便您可以尝试并特别调试。当我尝试运行该代码时,我收到一个异常错误:“400(错误请求)”,它在第一行崩溃您的请求是否假定要进行身份验证?不,它们不必进行身份验证,我要做的只是从数据库中删除与我传递给它的id匹配的项firebase库您使用的是什么?firebase.Xamarin v0.3.6在将记录保存到数据时,为什么不将activityid作为密钥首先是base?否则,您必须加载所有记录,然后遍历它们以找到与筛选器匹配的记录,然后使用它的键将其从数据库中删除