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)。
我已经写了这个 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)。