私はJSONからデータをフェッチし、Asynctask(doinbackground)でのArrayListに格納していますを返す - ArrayListに追加した後にログを維持し、これは正しく、すべての項目が表示されます。 onPostExecuteでArrayListの<HashMap>は常に最後の値
、私は様々な位置にいくつかのArrayListを印刷しています - しかし、それは常に最後のエントリを表示します。完全AsyncTask
public class GetTheCarList extends AsyncTask<Void,Void,Void>
{
ProgressDialog progressDialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog=ProgressDialog.show(getActivity(),"","Loading..");
}
@Override
protected Void doInBackground(Void... params) {
StringBuilder sb=new StringBuilder();
BufferedReader br=null;
try {
br=new BufferedReader(new InputStreamReader(getActivity().getAssets().open("vehicles.json")));
String temp;
while((temp=br.readLine())!=null)
{
sb.append(temp);
}
} catch (IOException e) {
e.printStackTrace();
}
finally {
try {
br.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
JSONArray jsonAr = null;
try {
jsonAr = new JSONArray(sb.toString());
} catch (JSONException e) {
e.printStackTrace();
}
mapping=new HashMap<>();
carList=new ArrayList<>();
for(int i=0;i<=jsonAr.length();i++)
{
JSONObject jsonOb= null;
try {
jsonOb = jsonAr.getJSONObject(i);
String year=jsonOb.getString("year");
String make=jsonOb.getString("make");
String model=jsonOb.getString("model");
String mileage=jsonOb.getString("mileage");
String icon=jsonOb.getString("image_url");
mapping.put("year",year);
mapping.put("make",make);
mapping.put("model",model);
mapping.put("mileage",mileage);
mapping.put("image_url",icon);
carList.add(mapping);
Log.e("***", "carlist " + " " + carList.get(i)); // WORKS CORRECTLY
} catch (JSONException e) {
e.printStackTrace();
}
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
efficientAdapter=new EfficientAdapter();
Log.e("***", "carlist " + " " + carList.get(17620)); // DISPLAYS LAST VALUE
lvCarList.setAdapter(efficientAdapter);
progressDialog.dismiss();
}
}
上記のリンクには2つのソリューションがあります:1)リストオブジェクトの静的フィールド2)誤って同じオブジェクトをリストに追加しています。私は静的な配列のリストを言及しなかったと私は入力としてログ、それは期待どおりに印刷されている –
それは第2のものです。同じオブジェクトをリストに繰り返し追加していますが、ログするたびに最新の値に更新されています。 –