2017-04-21 22 views
2

我在Xamarin Android應用程序中從我的Firebase數據庫中刪除項目時遇到問題。Xamarin Firebase DeleteAsync

我得到一個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; } 
} 

火力地堡數據庫表: enter image description here

注意活動我正在傳遞給RemovePost方法是「0」

+0

是你的請求,假設要進行身份驗證查詢? – Nkosi

+0

不,他們不需要進行身份驗證,我想要做的就是從數據庫中刪除與我傳遞給它的身份證相匹配的項目 –

+0

您使用的是哪種Firebase庫? – Nkosi

回答

2

那麼,爲什麼在第一個地方保存記錄到數據庫中,當你不使ActivityId的關鍵?

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(); 

這樣,查詢記錄時,你可以在一個已知的關鍵

0

此:

await firebase.Child("posts").Child(ActivityID) 

將嘗試到ActivityID相匹配,你的情況是價值KiG7ju8CsDfGW3eSBIn

試着改變你的火力刪除節點的根打電話是這樣的:

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(); 
+0

這一行給我一個新的錯誤:{System.Net.Http。HttpRequestException:400(Bad Request) –

+0

嘗試先獲取記錄,不要執行刪除部分firebase.Child(「posts」)。OrderBy(「ActivityID」)。EqualTo(ActivityID)'並調試以查看是否有訪問記錄。另外告訴我你使用的nuget包是什麼 – apineda

+0

我正在使用Firebase.Xamarin v0.3.6,當我使用該行時,我得到一個Firebase.Xamarin.Database.Query.FilterQueryobject,我試圖深入瞭解它是否它是我的發佈對象,但我還沒有找到它 –

相關問題