Error: System.NullPointerException: Attempt to de-reference a null object

Error: System.NullPointerException: Attempt to de-reference a null object

我已经写了这个 class 我从触发器调用它以防止用户为同一机会选择多个机会产品,但它给了我这个错误: System.NullPointerException: 尝试取消引用空对象 而且我似乎找不到解决方法。

这是我的代码:

public class AP03_OpportunityLineItem {
    public static void preventmultipleOpportunityLineItems(List<OpportunityLineItem> listOppLineItems){
        Set<Id>opportunityIds = new Set<Id>();
        List<OpportunityLineItem> listOfOpportunityLineItems = new List <OpportunityLineItem>();
        // get all parent IDs
        for(OpportunityLineItem oli : listOfOpportunityLineItems)
        {
            opportunityIds.add(oli.OpportunityId);
        }
        // query for related Opportunity Line Items
        Map<Id, Opportunity> mapOpportunities = new Map<Id, Opportunity>([SELECT ID, 
                                                                          (SELECT ID 
                                                                           FROM OpportunityLineItems) 
                                                                          FROM Opportunity 
                                                                          WHERE ID IN :opportunityIds]);
        for(OpportunityLineItem olitems : listOppLineItems)
        {
            if(mapOpportunities.get(olitems.OpportunityId).OpportunityLineItems.size()>0)
            {
                olitems.addError('Ce client ne peut plus loué des véhicules');
            }
        }
    }
}

提前致谢。

第 4 行对您的实际要求没有意义,第 4 行和第 6 行是导致您做出错误决定的罪魁祸首,因此是错误的代码。以下是您的代码的修改版本,它将按预期工作。

public class AP03_OpportunityLineItem {
public static void preventmultipleOpportunityLineItems(List<OpportunityLineItem> listOppLineItems){
    Set<Id>opportunityIds = new Set<Id>();
    //List<OpportunityLineItem> listOfOpportunityLineItems = new List <OpportunityLineItem>();  //NOT REQUIRED
    // get all parent IDs
    for(OpportunityLineItem oli : listOppLineItems)  // YOU HAVE TO USE listOppLineItems INSTEAD OF listOfOpportunityLineItems
    {
        opportunityIds.add(oli.OpportunityId);
    }
    // query for related Opportunity Line Items
    Map<Id, Opportunity> mapOpportunities = new Map<Id, Opportunity>([SELECT ID, 
                                                                      (SELECT ID 
                                                                       FROM OpportunityLineItems) 
                                                                      FROM Opportunity 
                                                                      WHERE ID IN :opportunityIds]);
    for(OpportunityLineItem olitems : listOppLineItems)
    {
        if(mapOpportunities.get(olitems.OpportunityId).OpportunityLineItems.size()>0)
        {
            olitems.addError('Ce client ne peut plus loué des véhicules');
        }
    }
}

}

关于你的NullPointerException,上面的代码(虽然你的代码是错误的,但仍然是你的代码)不会得到这个异常,除非你通过将null作为argument/parameter传递来调用这个方法。因此,在调用此方法之前,您必须验证您没有将 null 作为参数传递,或者您可以在此方法中的第二个 for 循环之前仅包含 if 语句(检查 null)。