Временная метка Firestore в ArrayList <String>, а затем в Date - PullRequest
0 голосов
/ 10 марта 2020

У меня есть статистика c ArrayList, заполняемая при запуске из Firebase для хранения различных значений. Одно из полей FB, которое мне нужно сохранить, это Timestamp.

Мне нужно сохранить Timestamp в моем массиве, но затем отобразить его позже в удобочитаемом формате Date.

Инициализировать ArrayList:

static ArrayList<String> suspectedValues = new ArrayList();

Получить метку времени из FB:

Timestamp dtg = (Timestamp) document.getData().get("dtg");

Установить метку времени в виде строки и сохранить в массиве:

String timeStamp = String.valueOf(dtg);
String suspectedData [] = {timeStamp};
suspectedValues.addAll(Arrays.asList(suspectedData));

Позже в другой деятельности onCreate:

int counter = 0;

for(int i = 0; i < suspectedValues.size(); i = i + 4){

    String timeStamp = suspectedValues.get(4);
    Date dtg = new Date(Long.parseLong(timeStamp));

    gMap.addMarker(new MarkerOptions().position(latLng).title(suspected).snippet("id: " + id + " | " + taggedAt + ": " + dtg).icon(BitmapDescriptorFactory.fromBitmap(smallMarker)));

    if(suspectedValues.size() != 0){
        counter = counter + 4;
    }
}

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

java.lang.NumberFormatException: For input string: "56.504800874303676"
    at java.lang.Long.parseLong(Long.java:594)
    at java.lang.Long.parseLong(Long.java:636)

Я также пытался:

Timestamp dtg = (Timestamp) document.getData().get("dtg");
Date date = dtg.toDate();
String timeStamp = date.toString();
String suspectedData [] = {timeStamp};
suspectedValues.addAll(Arrays.asList(suspectedData));

с:

String timeStamp = suspectedValues.get(4);
Date theSameDate = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy").parse(timeStamp);

Но он продолжает выбрасывать Разбор исключения.

Timestamp from FB: Timestamp(seconds=1583706187, nanoseconds=895000000)
Converted to Date: Sun Mar 08 22:23:07 GMT 2020
timestamp String going into Array: Sun Mar 08 22:23:07 GMT 2020
timestamp String coming out of Array: 62.76105524614817
I/MapsActivity: ParseException: java.text.ParseException: Unparseable date: "62.76105524614817"

1 Ответ

0 голосов
/ 11 марта 2020

Хорошо, я решил обходной путь,

Я создал два отдельных ArrayLists, один принимает String, а второй принимает Date.

static ArrayList<String> suspectedValues = new ArrayList();
static ArrayList<Date> suspectedDateValues = new ArrayList<>();

Вместо этого я поместил все свои даты во 2-й ArrayList 1-го.

Я также создал 2 счетчика.

int counter = 0;
int counter1 = 0;

Я знаю, что у меня есть дата после каждых 3 значений в первом ArrayList. Поэтому, когда я перебираю 1-й список, я вызываю новый метод, передавая все значения из 1-го метода, который извлекает дату из 2-го ArrayList и использует эту дату вместе с переданными значениями для выполнения моих задач.

    for(int i = 0; i < suspectedValues.size(); i = i + 3){

        [snip]

        getSuspectedDate(lat, lng, gMap, counter1, passedActivity, id, smallMarker);

        if(suspectedValues.size() != 0){
            counter = counter + 3;
            counter1 = counter1 + 1;
        }
    }

И мой последний метод выполнялся на каждой итерации for l oop выше:

public void getSuspectedDate(double lat, double lng, GoogleMap gMap, int counter1, Activity passedActivity, String id, Bitmap smallMarker){
        String suspected = passedActivity.getResources().getString(R.string.suspected);
        String taggedAt = passedActivity.getResources().getString(R.string.taggedDTG);

            Date date = suspectedDateValues.get(counter1);
            String dtg = String.valueOf(date);
            LatLng latLng = new LatLng(lat, lng);

            gMap.addMarker(new MarkerOptions().position(latLng).title(suspected).snippet("id: " + id + " | " + taggedAt + ": " + dtg).icon(BitmapDescriptorFactory.fromBitmap(smallMarker)));

        }

Не самое чистое решение, но оно работает!

...