В настоящее время я пишу приложение, которое вытаскивает массив longs с сервера через json, а затем передает этот список из одной активности в другую. Основной скелет выглядит следующим образом:Sane way from ArrayList <Long> через намерение
public void onResponse(Map result)
{
ArrayList handles= (ArrayList)result.get("fileHandles");
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("handles", handles);
}
Итак, первая проблема становится очевидной, только методы putExtra являются putIntegerArrayListExtra
, putStringArrayListExtra
, putCharSequenceArrayListExtra
и putParcelableArrayListExtra
. Мышление Долго, вероятно, было бы разумным, я был неправ, что он не работает (даже если я использую ArrayList<Long>
). Затем я подумал, что просто пройду длинный [], но я не вижу прямого преобразования, чтобы перейти от ArrayList<Long>
к длинному [], который примет intent.putExtra
. Это было решение, которое я наконец закончил с:
ArrayList handles= (ArrayList)result.get("fileHandles");
long [] handleArray = new long[handles.size()];
for (int i = 0; i < handles.size(); i++)
{
handleArray[i] = Long.parseLong(handles.get(i).toString());
}
Очевидно, что это казалось немного смешно для меня, но все другие преобразования я пытался, казалось, жалуются на той или иной причине. Я подумал о том, чтобы передумать мою сериализацию, чтобы решить эту проблему до того, как я доберусь до этого момента, но мне показалось странным, что передача ArrayList<Long>
от активности к активности может быть настолько сложной. Есть ли более очевидное решение, которое мне не хватает?
FWIW: 'Long.parseLong (handles.get (i) .toString());' может быть записано как '(long) (Long) handles.get (i)' ('(long)' фактически необязательно в контексте), когда источником является «ArrayList». Он использует dowcast, а затем явный (или неявный) un-autobox вместо Long-> String-> long. –
user2864740
@ user2864740 Проблема заключается в том, что 'handles.get (i)' возвращает мне целое число, если оно меньше 2 миллиардов или около того, что приводит к недействительному приведению, если я использую этот код. –