我真的不明白为什么会这样。到目前为止,这是我从未遇到过的最奇怪的错误。
问题是我正在使用Retrofit从服务器检索一些信息,为此,我需要创建一个名为POJO_PATIENTINFO
的POJO。在这个pojo中,我有一个名为BigDataset_PatientInfo
的{{1}}变量。在这个变量中,我存储了一个名为data
的{{1}},其中我有这些字符串:
没有问题。我的想法是,我想从另一个Fragment.class中恢复这些字符串,我认为的简单任务。
这是我执行这么简单任务的代码:
List<Dataset_RegVar>
在第一次迭代之后,就在&#34; i ++之前;&#34;行执行时,String数组都存储完全相同的值,即与registro_variable
相同的值。简而言之,上面的代码就像我在写一样执行:
int size = POJOS.getPojo_patientInfo().data.registro_variable.size();
int i = 0;
strVariable = strId = strFecha = strMedida = strDescripcion = strComentarios = new String[size];
for (POJO_PATIENTINFO.Dataset_RegVar dataset : POJOS.getPojo_patientInfo().data.registro_variable) {
strVariable[i] = dataset.registro_var_variable;
strId[i] = dataset.registro_var_id;
strFecha[i] = dataset.registro_var_fecha;
strMedida[i] = dataset.registro_var_medida;
strDescripcion[i] = dataset.registro_var_descripcion;
strComentarios[i] = dataset.registro_var_comentario;
i++;
}
显然,我想到的第一件事就是所有这些字符串都可能保持相同的价值。 不,他们不是。我知道这是因为我自己做了一些调试工作。让我粘贴一些结果(请注意,这些图像适用于i = 3):http://postimg.org/gallery/2gf1lj7qa/
如果您认为有必要,我会提供更多详细信息。感谢。
答案 0 :(得分:6)
您正在为所有这些变量分配一个 String数组。因此,对这些变量中的任何一个的最后一次写入都会覆盖所有其他变量中的相应索引。这恰好就是这个任务:
strComentarios[i] = dataset.registro_var_comentario;
所以而不是
strVariable = strId = strFecha = strMedida = strDescripcion = strComentarios = new String[size];
你需要写
strVariable = new String[size];
strId = new String[size];
strFecha = new String[size];
strMedida = new String[size];
strDescripcion = new String[size];
strComentarios = new String[size];
答案 1 :(得分:3)
有趣的理由:您对所有字符串数组使用相同的内存位置。
为什么在每个数组中都获得strComentarios
的值:因为为其分配了新的内存位置,并且您正在为其他数组使用相同的内存位置。因此,无论strComentarios
中的更新如何,所有其他数组都会获得该值。
strVariable = strId = strFecha = strMedida = strDescripcion = strComentarios = new String[size];
像这样拆分
strVariable = new String[size];
strId = new String[size];
strFecha = new String[size];
strMedida = new String[size];
strDescripcion = new String[size];
strComentarios = new String[size];