Tôi hiện đang viết một ứng dụng kéo một loạt các thời gian dài từ máy chủ qua json và sau đó chuyển danh sách đó từ một hoạt động này sang hoạt động khác. Bộ xương cơ bản trông như thế này:Sane cách để đi từ ArrayList <Long> thông qua Intent
public void onResponse(Map result)
{
ArrayList handles= (ArrayList)result.get("fileHandles");
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("handles", handles);
}
Vì vậy, vấn đề đầu tiên trở nên rõ ràng, các phương pháp duy nhất cho putExtra là putIntegerArrayListExtra
, putStringArrayListExtra
, putCharSequenceArrayListExtra
, và putParcelableArrayListExtra
. Suy nghĩ Long có thể sẽ được chuyển nhượng, tôi đã sai nó không hoạt động (ngay cả khi tôi sử dụng ArrayList<Long>
). Tiếp theo tôi nghĩ rằng tôi chỉ cần vượt qua một [] dài, tuy nhiên tôi thấy không có chuyển đổi thẳng về phía trước để đi từ ArrayList<Long>
đến dài [] rằng intent.putExtra
sẽ chấp nhận. Đây là giải pháp cuối cùng tôi đã kết thúc với:
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());
}
Rõ ràng điều này dường như hơi vô lý đối với tôi, nhưng mọi chuyển đổi khác tôi đã thử dường như phàn nàn vì một lý do nào đó. Tôi đã nghĩ về việc suy nghĩ lại việc serialization của tôi để có vấn đề được chăm sóc trước khi tôi nhận được đến thời điểm này, nhưng tôi thấy nó kỳ lạ mà đi qua ArrayList<Long>
từ hoạt động đến hoạt động có thể rất khó khăn. Có một giải pháp rõ ràng hơn tôi đang thiếu?
FWIW: 'Long.parseLong (handles.get (i) .toString());' có thể được viết là '(long) (Long) handles.get (i)' ('(dài)' thực sự là tùy chọn trong ngữ cảnh) khi nguồn là một 'ArrayList'. Nó sử dụng một dowcast và sau đó là một (hoặc ngầm) un-autobox rõ ràng thay vì Long-> String-> long. –
user2864740
@ user2864740 Vấn đề là 'handles.get (i)' đang cho tôi trở lại một số nguyên nếu nó dưới 2 tỷ hoặc hơn, kết quả trong một dàn diễn viên không hợp lệ nếu tôi sử dụng mã đó. –