C# Xamarin Firebase DeleteAsync
我在Xamarin Android应用程序上从Firebase数据库中删除项目时遇到问题 我收到一个400(错误请求)错误 删除方法: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
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?否则,您必须加载所有记录,然后遍历它们以找到与筛选器匹配的记录,然后使用它的键将其从数据库中删除