我有一个自定义listView,其中包含来自Cloud DB的200个值。正确接收所有值并将其添加到ArrayList(hotelList)中。当我将ArrayList(hotelList)传递给Custom Adapter类时,将所有值显示为最后一个元素。在这里找到的许多stackOverflow问题都与此有关,我也试过了。没有人为我工作。我该怎么解决这个问题? 代码是,
@Override
protected void onPostExecute(String result) {
try {
Log.d("Inside Post", "message");
root = new JSONObject(result);
validation = root.getInt("response");
message = root.getString("message");
JSONArray data=root.getJSONArray("data");
data.length();
if(validation==1) {
hgs=new HotelGetSetter();//Getting and setting class
for(int i=0;i<data.length();i++){
hgs.setName(data.getJSONObject(i).getString("hotel_name"));
hgs.setPlace(data.getJSONObject(i).getString("city"));
hotelList.add(hgs);//While Debugging, all the 200 values from db received and added in the ArrayList(hotelList) values also there correctly
}
//But after the loop all the values here changed to last element value(debugged).
mainMethod();
}
}
catch (JSONException e) {
e.printStackTrace();
}
}
public void mainMethod(){
HotelCustomAdapter hca=new HotelCustomAdapter(HotelMaster.this,hotelList);
list_hotel.setAdapter(hca);
//list_hotel.setAdapter(new HotelCustomAdapter(this, hotel_id1,hotel_name1,hotel_place1));
}
答案 0 :(得分:2)
初始化变量hgs = new HotelGetSetter();超出for循环,然后你总是编辑同一个实例
答案 1 :(得分:1)
您正在通过循环更改同一对象hsg
的值,而不是为每组值创建不同的对象。因此200个相同的对象。
只需将hgs=new HotelGetSetter();
移动到循环中即可。