函数调用

时间:2016-11-20 14:23:31

标签: java nullpointerexception ebay ebay-api

我正在使用Java和eBay SDK(API)的第一步。

在此代码段中,我尝试从易趣中获取类别列表。

调用似乎有效,我在gcResponse对象中获得了大量结果。 下一步是循环返回的类别。 类别以数组形式返回。 CategoryType类型的变量ct包含一个类别。 调试时,我可以看到正确填充数据的CategoryType对象(Name,Level,...)。

ct.leafCategory的值为' false'表明此类别不是叶子类别。

但是当我尝试通过getLeafCategory()函数访问这个字段时,我得到一个Null指针异常(它被APIException-catch块捕获)。

现在我想知道我是如何正确访问这个字段的(我想要的只是' false')。我无法直接访问该字段,因为它当然似乎是私有的。

这是否意味着,NPE发生在leafCategory() - 函数中?但是该功能除了返回leafCategory之外还可以做什么;'?

非常感谢给我一个提示!

    ApiContext apiContext = getContext(env, siteID);

    GetCategoriesCall call = new GetCategoriesCall(apiContext);
    GetCategoriesResponseType gcResponse = null;

    call.setParentCategories(new String[] {"3187"});

    call.setCategorySiteID(getSiteCode(siteID));

    call.setDetailLevel(new DetailLevelCodeType[] {DetailLevelCodeType.RETURN_ALL});

    try {

        call.getCategories();
        gcResponse = call.getResponse();

        CategoryArrayType arr = gcResponse.getCategoryArray();

        CategoryType ct = new CategoryType();

        KMTgcResponse.categories = new KMTCategory[arr.getCategoryLength()];

        for (int i=0; i<arr.getCategoryLength(); i++){
            ct = arr.getCategory(i);
            KMTgcResponse.categories[i] = new KMTCategory();
            KMTgcResponse.categories[i].ID = ct.getCategoryID();

            KMTgcResponse.categories[i].leafCategory = ct.isLeafCategory();   // NullPointerException here !!!
            KMTgcResponse.categories[i].level = ct.getCategoryLevel();
            KMTgcResponse.categories[i].name = ct.getCategoryName();
            KMTgcResponse.categories[i].parentID = ct.getCategoryParentID();
        }

        response.getCategoriesResponse = KMTgcResponse;
        response.rc = 1;

    } catch (ApiException e) {
        e.printStackTrace();
        response.err_msg = Common.toString(e);
        response.rc = -1;
} catch (Exception e) {
        response.err_msg = Common.toString(e);
        response.rc = -1;
    }
}

1 个答案:

答案 0 :(得分:1)

如果KMTgcResponse.categories[i].leafCategoryboolean原语而不是Boolean对象而ct.isLeafCategory();返回null(如,API中不存在值),则从取消装箱中获取NullPointerException Booleanboolean,因为您无法将null分配给基元。

参考:http://developer.ebay.com/devzone/javasdk-jaxb/docs/libref/com/ebay/soap/eBLBaseComponents/CategoryType.html#isLeafCategory()

无论如何,

数组上的循环看起来很奇怪。你几乎可以这样做(假设那些类型匹配)

KMTgcResponse.categories[i] = arr.getCategory(i);

或者,因为您只是指的是相同的数组位置

KMTgcResponse.categories =  arr;

至少,这是写它的首选方式

ct = arr.getCategory(i);
KMTCategory kmtcat = new KMTCategory();
kmtcat.ID = ct.getCategoryID();
kmtcat.leafCategory = null == ct.isLeafCategory() || ct.isLeafCategory(); // temporary error fix 
// other values 
KMTgcResponse.categories[i] = kmtcat;  // set the array