Я пишу приложение для Android Xamarin и мне нужно обновить одно значение в Hashmap, подключенном к Firebase - PullRequest
0 голосов
/ 25 июня 2019

У меня есть приложение, которое подключено к базе данных Firebase.Мой текущий код не обновляет старое значение, а заменяет все предыдущие записи данных одним идентификатором задания.

Вот код, который принимает данные и сохраняет их в базе данных.

public override View OnCreateView(LayoutInflater inflater, ViewGroup 
container, Bundle savedInstanceState)
    {
        // Use this to return your custom view for this Fragment
        View view = inflater.Inflate(Resource.Layout.newequipment, container, false);
        // return inflater.Inflate(Resource.Layout.YourFragment, container, false);
        equipmentText = (TextInputLayout)view.FindViewById(Resource.Id.equipmentText);
        descriptionText = (TextInputLayout)view.FindViewById(Resource.Id.descriptionText);
        jobText = (TextInputLayout)view.FindViewById(Resource.Id.jobText);
        typeSpinner = (MaterialSpinner)view.FindViewById(Resource.Id.typeSpinner);
        submitButton = (Button)view.FindViewById(Resource.Id.submitButton);

        submitButton.Click += SubmitButton_Click;
        SetupTypeSpinner();

        return view;
    }

    private void SubmitButton_Click(object sender, EventArgs e)
    {
        string equipmentNumber = equipmentText.EditText.Text;
        string description = descriptionText.EditText.Text;
        string job = jobText.EditText.Text;

        HashMap equipmentInfo = new HashMap();
        equipmentInfo.Put("equipmentNumber", equipmentNumber);
        equipmentInfo.Put("description", description);
        equipmentInfo.Put("job", job);
        equipmentInfo.Put("type", type);

        SupportV7.AlertDialog.Builder saveDataAlert = new SupportV7.AlertDialog.Builder(Activity);
        saveDataAlert.SetTitle("SAVE EQUIPMENT INFORMATION");
        saveDataAlert.SetMessage("Are you sure?");
        saveDataAlert.SetPositiveButton("Continue", (senderAlert, args) =>
        {
            DatabaseReference newEquipmentRef = AppDataHelp.GetDatabase().GetReference("equipment").Push();
            newEquipmentRef.SetValue(equipmentInfo);
            this.Dismiss();
        });
        saveDataAlert.SetNegativeButton("Cancel", (senderAlert, args) =>
        {
            saveDataAlert.Dispose();
        });

        saveDataAlert.Show();
    }

Это код, который вызывает проблему.

public override View OnCreateView(LayoutInflater inflater, ViewGroup 
container, Bundle savedInstanceState)
    {
        // Use this to return your custom view for this Fragment
        View view = inflater.Inflate(Resource.Layout.moveequipment, container, false);
        // return inflater.Inflate(Resource.Layout.YourFragment, container, false);
        jobText = (TextInputLayout)view.FindViewById(Resource.Id.jobText);
        submitButton = (Button)view.FindViewById(Resource.Id.submitButton);

        submitButton.Click += SubmitButton_Click;
        return view;
    }

    private void SubmitButton_Click(object sender, EventArgs e)
    {
        string updateJob = jobText.EditText.Text;

        DatabaseReference updateEquipmentRef = AppDataHelp.GetDatabase().GetReference();
        updateEquipmentRef.Child("equipmentNumber").Child("description").Child("type");

        HashMap updateMap = new HashMap();       
        updateMap.Put("job", updateJob);

        updateEquipmentRef.SetValue(updateMap);

Редактировать: Структура данных

public class Equipment
{
    public string EquipmentNumber { get; set; }
    public string Description { get; set; }
    public string Job { get; set; }
    public string Type { get; set; }
    public string ID { get; set; }
}

public void OnDataChange(DataSnapshot snapshot)
    {
        if (snapshot.Value != null)
        {
            var child = snapshot.Children.ToEnumerable<DataSnapshot>();
            equipmentList.Clear();
            foreach (DataSnapshot equipmentData in child)
            {
                Equipment equipment = new Equipment();
                equipment.ID = equipmentData.Key;
                equipment.EquipmentNumber = equipmentData.Child("equipmentNumber").Value.ToString();
                equipment.Description = equipmentData.Child("description").Value.ToString();
                equipment.Type = equipmentData.Child("type").Value.ToString();
                equipment.Job = equipmentData.Child("job").Value.ToString();
                equipmentList.Add(equipment);
            }
            EquipmentRetrieved.Invoke(this, new EquipmentDataEventArgs { Equipment = equipmentList });
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...