Хранение хеш-карты в массиве и наоборот - PullRequest
0 голосов
/ 27 февраля 2019

В настоящее время я занимаюсь разработкой приложения с использованием облачного хранилища в качестве серверной службы.Кроме того, я хочу сохранить значения hashmap в массиве и затем передать его в базу данных.следующий код - это то, что уже достигнуто, но все еще не соответствует тому, что мне нужно.

Класс модели

public class TripsInfoModel {
private String Country, Region, Balance, Stutas, updateDate, UserID;
List<String> TripsData;

public TripsInfoModel() {
}

public TripsInfoModel(String country, String region, String balance, String stutas, String updateDate, String userID,List<String> tripsData) {
    Country = country;
    Region = region;
    Balance = balance;
    Stutas = stutas;
    this.updateDate = updateDate;
    UserID = userID;
    TripsData = tripsData;


}



public String getCountry() {
    return Country;
}

public String getRegion() {
    return Region;
}

public String getBalance() {
    return Balance;
}

public String getStutas() {
    return Stutas;
}

public String getUpdateDate() {
    return updateDate;
}

public String getUserID() {
    return UserID;
}

public List<String> getTripsData() {
    return TripsData;
}

Отправка данных в функцию пожарного хранилища

 String startDate = startPickDate.getText().toString().trim();
    String EndDate = endPickDate.getText().toString().trim();
    String Country = CountryName.getText().toString().trim();
    String CityNmae = mCity.getText().toString().trim();
    int Balance = Integer.parseInt(TripBalance.getText().toString());
    String Dsc = mDec.getText().toString().trim();

    HashMap <String, String>TripList = new HashMap<>();
    TripList.put("From",startDate);
    TripList.put("End",EndDate);
    TripList.put("Note",Dsc);

    String [] data = (String[]) TripList.values().toArray();
    List<String> TripsData = Arrays.asList(data);




    if (startDate.equals("") || EndDate.equals("")
            || Country.equals("") || CityNmae.equals("") || Balance <= 0 || Dsc.equals("")) {
        Toast.makeText(DateAndTime2.this, "Please identify  the date ,  or filed is missed", Toast.LENGTH_SHORT).show();

    } else {
        TripsInfoModel addData = new TripsInfoModel(Country,CityNmae,Balance,"Available",CurrentTime,UID,TripsData);
        db.collection("TripsInfo").document(UID).collection("SeprateData").document()
                .set(addData).addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if (task.isSuccessful()){
                    Toast.makeText(DateAndTime2.this, "Data has added successfully",Toast.LENGTH_SHORT).show();
                }

            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {

            }
        });

    }

Кроме того, привязанный снимок показывает, чего я действительно хочу достичь Triplist

1 Ответ

0 голосов
/ 27 февраля 2019

Как только вы получите полевые данные из облачного хранилища пожаров как HashMap, сопоставьте все ключи и значения поочередно в Array, как показано ниже.Все клавиши находятся в четных номерах , а все значения находятся в нечетных местах

   0       1       2       3      . . .   n-1      n         <--- Index

| Key1 | Value1 | Key2 | Value2 | . . . | Keyn | Valuen |    <--- Array

Это можно сделать с помощью HashMap.keySet(), чтобы получитьвсе ключи как набор, а затем используйте HashMap.get(key), чтобы получить соответствующее значение.Вставьте его в массив, как показано на рисунке, и все готово.

Помните, Keyk будет на Array[k-1], а Valuek будет на Array[k].Например, Key7 будет в Array[6], а соответствующее ему значение Value7 будет в Array[7]

Если вам нужен определенный ключ, и вы не знаете его индекс, просто запустите Линейный поиск в массиве, чтобы найти ключ, а в следующем индексе - его соответствующее значение.

Чтобы сгенерировать HashMap из Array, отформатируйте массив, как показано выше, и используйтеHashMap.put(key, value)

Дело в том, что все HashMaps могут храниться в виде массива, но хранение массива в виде HashMap не имеет смысла все время

РЕДАКТИРОВАТЬ: Забыли ответитьдобавление в Firestore вещь

Поле tripList, показанное на изображении, является массивом HashMaps. Просто создайте Array с типом данных Object и загрузите их с HashMap с, как показано.

     0          1          2                  n
| HashMap0 | HashMap1 | HashMap2 | . . . | HashMapn |

Теперь загрузите этот массив в Cloud Firestore с помощью следующей команды

db.collection("TripsList").document(UID).update("tripList", HashMapArray);

Помните, что в Firestore должен быть массив с именем tripList, чтобы избежать ошибок

Надеюсь, это поможет ..!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...