我当前正在编写一个应用程序,通过json从服务器获取长整型数组,然后将该列表从一个活动传递到另一个活动。 基本框架如下:
显然,这对我来说有点荒谬,但我尝试了其他每一种转换方式都因为某种原因而出现问题。 我考虑重新思考我的序列化方式,在到达这一点之前先解决问题,但我觉得通过从活动传递
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
。我认为 Long 可能会是 parcelable,但我错了,它不起作用(即使我使用 ArrayList<Long>
)。接下来,我想只是传递一个 long [],但我发现没有直接的转换方法可以将 ArrayList<Long>
转换成 intent.putExtra
将接受的 long []。这就是我最终采取的解决方案:
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>
可以如此困难,这很奇怪。 我是否错过了更明显的解决方案?
ArrayList<Long>
时,Long.parseLong(handles.get(i).toString());
可以写成(long)(Long)handles.get(i)
(在上下文中,(long)
实际上是可选的)。它使用了一个向下转型,然后是一个显式(或隐式)的取消自动装箱,而不是 Long->String->long。 - user2864740handles.get(i)
返回的是小于20亿左右的整数,则会导致无效转换。 - Kevin DiTraglia