如何在comboBox中显示我的JSON数据?

时间:2013-03-26 12:56:39

标签: java json jcombobox

我已经想要阅读我的JSONData了,现在我想将“name”键显示在一个组合框中。 但我得到了我的字符串数组的nullpointerexception。 在我尝试将JSON对象直接发送到defaultComboBoxModel之前。但它需要是和String Array所以当我转换它时,一切都变为null。 为什么我的数组变为空?

我的代码:

import java.util.ArrayList;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;


public class Planner {

    private String startingLocation;
    private String destination;
    private static Planner planner = null;
    private int id;
    private JSONArray array;
    ArrayList myList = new ArrayList();

    public static Planner getPlanner(){

        if (planner == null ){

            planner = new Planner();

        }

        return planner;

    }

    public void setStartingLocation(String from) {

        this.startingLocation = from;       

    }

    public void setDestination(String dest) {

        this.destination = dest;

    }

    public String getStartingLocation() {

        return startingLocation;

    }

    public String getDestination() {

        return destination;

    }


    public void setID(int id) {

        this.id = id;

    }

    public void setLocationName (JSONArray array){

        this.array = (JSONArray) array;

    }

    public String[] getLocationName(){

        System.out.println(this.array.size());

      for (int i=0; i<this.array.size(); i++){

           myList = (ArrayList) this.array.get(i);
           myList.add(i, array);

       }

       System.out.println(myList);

    return  (String[]) myList.toArray();

    }

}

public void parseJsonData() throws ParseException {

        JSONParser parser = new JSONParser();
        Object obj = parser.parse(jsonData);
        JSONObject topObject = (JSONObject) obj;
        JSONObject locationList = (JSONObject) topObject.get("LocationList");
        JSONArray array = (JSONArray) locationList.get("StopLocation");
        Iterator<JSONObject> iterator = array.iterator();
        String name = null;

        while (iterator.hasNext()) {

            JSONObject jsonObj = (JSONObject) iterator.next();
            Planner.getPlanner().setLocationName(array);

        }

    }

final DefaultComboBoxModel model = new DefaultComboBoxModel(Planner.getPlanner().getLocationName());
        comboBox = new JComboBox(model); 

1 个答案:

答案 0 :(得分:0)

我不会对代码风格或设计缺陷发表评论,但这里有一些看似错误的行:

for (int i=0; i<this.array.size(); i++){
       myList = (ArrayList) this.array.get(i);
       myList.add(i, array);
}

myListArrayList,虽然我不知道array实际包含的JSONArray是什么,但是如果它包含字符串或{{将JSONObject投射到array.get(i)的实例可能会导致ArrayList。 如果ClassCastException包含其他array,则可能不会发生。

下一行非常奇怪。假设JSONArray实际返回一个列表,您将该列表分配给array.get(i),然后将该数组添加到该列表中,这将导致循环引用(myList包含包含{array的列表1}}等。)。

接下来,您在每次迭代中替换array,这可能不是您想要的。

假设myList包含array个问题,JSONArray扩展JSONArray(因此没有ArrayList)并且内部数组包含字符串,你可能会将方法更改为:

ClassCastException

通过这种方式,您可以将字符串列表(即包含public String[] getLocationName(){ System.out.println(this.array.size()); List<String> resultList = new LinkedList<String>(); for (int i=0; i<this.array.size(); i++){ //cast the inner array to a list of Strings (assuming it only contains Strings) List<String> innerList = (ArrayList) this.array.get(i); //add the inner list to the result list resultList.addAll( innerList ); } System.out.println(resultList ); return resultList.toArray(new String[resultList.size()]); } 的{​​{1}}的{​​{1}}列表转换为字符串的平面列表,并将其作为一个数组。