当'step over'调试工具点击时,Wierd..object在arraylist中获得重复

时间:2014-01-24 19:04:52

标签: android json arraylist

这很难解释但是......这段代码应该从JSON数组中添加项目并显示在ListView上。使用我覆盖的onResume方法刷新页面

    public void onResume() {
    super.onResume();

    if (adapter != null) {
        newItemlist.clear();
        newItemlist.addAll(getJsonData());
        adapter.notifyDataSetChanged();
        //newItemlist.clear();
    }
}

所有这一切应该是从JSON对象显示内容。以下是全班。

public class LogFragment extends Fragment {

Cursor cursor;
ListView listV;
String json;
SimpleAdapter adapter;
SharedPreferences exmaplePrefs;
public static final String PREFS = "examplePrefs";
ArrayList<HashMap<String, String>> newItemlist = new ArrayList<HashMap<String, String>>();

public LogFragment() {
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // getJsonData();

    String from[] = { "time", "event", "player" };
    int to[] = { R.id.time, R.id.event, R.id.player };
    adapter = new SimpleAdapter(getActivity(), newItemlist,
            R.layout.custom_list_row, from, to);

}

public ArrayList<HashMap<String, String>> getJsonData() {
    exmaplePrefs = this.getActivity().getSharedPreferences(PREFS, 0);
    json = exmaplePrefs.getString("jsonString", "cant find json");
    JSONObject MainObj = null;
    JSONArray JsonArray = null;
    JSONObject temp = null;

    try {

        MainObj = new JSONObject(json);
        JsonArray = MainObj.optJSONArray("Events");
        if (JsonArray == null) {
            temp = MainObj.getJSONObject("Events");

            String time = temp.getString("time");
            String event = temp.getString("event");
            String player = temp.getString("player");

            HashMap<String, String> map = new HashMap<String, String>();
            map.put("time", time);
            map.put("event", event);
            map.put("player", player);
            newItemlist.add(map);

        } else {
            for (int i = 0; i < JsonArray.length(); i++) {
                JSONObject c = JsonArray.getJSONObject(i);

                // Storing JSON item in a Variable
                String time = c.getString("time");
                String event = c.getString("event");
                String player = c.getString("player");

                // Adding value HashMap key => value
                HashMap<String, String> map = new HashMap<String, String>();
                map.put("time", time);
                map.put("event", event);
                map.put("player", player);
                newItemlist.add(map);

            }
        }

    } catch (Exception e) {
        // TODO: handle exception
        System.out.print("ERROR");
    }
    return newItemlist;
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_log, container,
            false);
    listV = (ListView) rootView.findViewById(android.R.id.list);
    listV.setAdapter(adapter);
    return rootView;
}

@Override
public void onResume() {
    super.onResume();

    if (adapter != null) {
        newItemlist.clear();
        newItemlist.addAll(getJsonData());
        adapter.notifyDataSetChanged();
        //newItemlist.clear();
    }
}

我遇到的问题是项目被复制,例如,如果我点击item1然后显示将显示item1 item1。如果我然后单击item2,则显示为item1 item2 item1 item2。

这引出了我的奇怪问题。在调试时,我逐步完成代码....更多的重复!即超过15行以下是结果。

[{item1 = ONE},{item1 = ONE},{item1 = ONE},{item1 = ONE},{item1 = ONE},{item1 = ONE},{item1 = ONE},{item1 = ONE },{ITEM1 =一个},{ITEM1 =一个},{ITEM1 =一个},{ITEM1 =一个},{ITEM1 =一个},{ITEM1 =一个},{ITEM1 = ONE},]

1 个答案:

答案 0 :(得分:1)

这很简单:

  • 步骤A,您清除newItemlist
  • 步骤B,您在newItemlist
  • 中添加了项目
  • 步骤C,您从newItemlist
  • 返回getJsonData
  • 步骤D,您在getJsonData
  • 中添加newItemList中的所有项目

您的商品是重复的。

相关问题