从ArrayList <Long>到Intent的Sane方式

Kev*_*lia 13 java android arraylist android-intent long-integer

我正在编写一个应用程序,通过json从服务器中提取多个long,然后将该列表从一个活动传递到另一个活动.基本骨架如下所示:

public void onResponse(Map result)
{
    ArrayList handles= (ArrayList)result.get("fileHandles");

    Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
    intent.putExtra("handles", handles);
}
Run Code Online (Sandbox Code Playgroud)

所以,第一个问题变得很明显,对于putExtra的唯一方法是putIntegerArrayListExtra,putStringArrayListExtra,putCharSequenceArrayListExtra,和putParcelableArrayListExtra.Thinking Long可能是可以分配的,我错了它不起作用(即使我使用ArrayList<Long>).接下来我以为我只是通过了一个很长的[],但是我认为没有直接的转换可以接受ArrayList<Long>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());
}
Run Code Online (Sandbox Code Playgroud)

显然这对我来说似乎有点荒谬,但我尝试的其他所有转换似乎都因某种原因而抱怨.在考虑到这一点之前,我已经考虑重新思考我的序列化以解决问题,但我发现ArrayList<Long>从活动到活动的过程可能非常困难.有没有更明显的解决方案我错过了?

kco*_*ock 16

您可以将其用作Serializable额外的.ArrayListSerializableLong扩展Number,它也实现Serializable:

// Put as Serializable
i.putExtra("handles", handles);

// Unfortunately you'll get an unsafe cast warning here, but it's safe to use
ArrayList<Long> handles = (ArrayList<Long>) i.getSerializableExtra("handles");    
Run Code Online (Sandbox Code Playgroud)