You need to sign in to do that
Don't have an account?

Map Collection Object-----Attempt to de-reference a null object
Hi All,
I am getting Null Pointer Exception: Attempting to de-reference a null object at this line only-----> DealsMap.put(deal.id,deal)
Screenshot of the Null Pointer Exception

It's not displaying any values in tabular format from Map Collection in my VF Page also.
How do I fix this issue?Please help me!
Apex Class:
public with sharing class searchname1 {
public PageReference edit() {
return null;
}
public String name { get; set; }
public list<Training_Deal__c> lstdeal { get; set; }
public list<Course_Master__c> lstcourse { get; set; }
public Map<id, Training_Deal__c> DealsMap { get; set; }
public boolean searched{get;set;}
//default constructor
public searchname1(){
searched=false;
string namestr=apexpages.currentpage().getparameters().get('name');
if(null!=namestr){
name=namestr;
}
}
public PageReference search() {
searched=true;
string searchstr1=('%'+name+'%');
System.debug('-----------before for loop');
try{
for ( Course_Master__c crs : [select ID,Name,Course_Name__c,
(select ID,Name,Course__c,Fees_Finalized__c from Training_Deals__r) from Course_Master__c
where Course_Name__c LIKE :searchstr1] ) {
for ( Training_Deal__c deal : crs.Training_Deals__r ) {
System.debug(deal.Course__c + ' - ' + deal.Name + ' - ' + deal.Fees_Finalized__c );
DealsMap.put(deal.id,deal);
System.debug('Map of Deals-----'+DealsMap);
}
}
System.debug('----------After for loop');
}catch(Exception e){
System.debug('Exception occured'+e);
}
return null;
}
}
VF Page:
<apex:page controller="searchname1" >
<apex:form >
<apex:pageblock id="one" >
<apex:pageblockSection >
<apex:pageblocksectionitem >
<apex:outputlabel >Course to Search</apex:outputlabel>
<apex:inputtext value="{!name}"/>
</apex:pageblocksectionitem>
<apex:commandButton value="Search" action="{!search}"/>
</apex:pageblockSection>
</apex:pageblock>
<apex:pageBlock id="SearchResults" rendered="{!searched}" >
<!-- <apex:pageblocktable value="{!lstcourse}" var="c">
<apex:column value="{!c.Name}"/>
<apex:column value="{!c.Course_Name__c}"/>
</apex:pageblocktable>
<apex:pageblocktable value="{!DealsMap}" var="d">
<apex:column value="{!d.Name}"/>
<apex:column value="{!d.Course__c}"/>
<apex:column value="{!d.Fees_Finalized__c}"/>
</apex:pageblocktable>
-->
<apex:pageBlock >
<apex:repeat value="{!DealsMap}" var="d">
{!d}<br/><br/>
<apex:repeat value="{!DealsMap[d]}" var="d1">
{!d1.name} <br/><br/>
</apex:repeat>
</apex:repeat>
</apex:pageBlock>
<apex:pageblockbuttons >
<apex:commandButton value="edit" action="{!edit}"/>
</apex:pageblockbuttons>
</apex:pageBlock>
</apex:form>
</apex:page>
I am getting Null Pointer Exception: Attempting to de-reference a null object at this line only-----> DealsMap.put(deal.id,deal)
Screenshot of the Null Pointer Exception
It's not displaying any values in tabular format from Map Collection in my VF Page also.
How do I fix this issue?Please help me!
Apex Class:
public with sharing class searchname1 {
public PageReference edit() {
return null;
}
public String name { get; set; }
public list<Training_Deal__c> lstdeal { get; set; }
public list<Course_Master__c> lstcourse { get; set; }
public Map<id, Training_Deal__c> DealsMap { get; set; }
public boolean searched{get;set;}
//default constructor
public searchname1(){
searched=false;
string namestr=apexpages.currentpage().getparameters().get('name');
if(null!=namestr){
name=namestr;
}
}
public PageReference search() {
searched=true;
string searchstr1=('%'+name+'%');
System.debug('-----------before for loop');
try{
for ( Course_Master__c crs : [select ID,Name,Course_Name__c,
(select ID,Name,Course__c,Fees_Finalized__c from Training_Deals__r) from Course_Master__c
where Course_Name__c LIKE :searchstr1] ) {
for ( Training_Deal__c deal : crs.Training_Deals__r ) {
System.debug(deal.Course__c + ' - ' + deal.Name + ' - ' + deal.Fees_Finalized__c );
DealsMap.put(deal.id,deal);
System.debug('Map of Deals-----'+DealsMap);
}
}
System.debug('----------After for loop');
}catch(Exception e){
System.debug('Exception occured'+e);
}
return null;
}
}
VF Page:
<apex:page controller="searchname1" >
<apex:form >
<apex:pageblock id="one" >
<apex:pageblockSection >
<apex:pageblocksectionitem >
<apex:outputlabel >Course to Search</apex:outputlabel>
<apex:inputtext value="{!name}"/>
</apex:pageblocksectionitem>
<apex:commandButton value="Search" action="{!search}"/>
</apex:pageblockSection>
</apex:pageblock>
<apex:pageBlock id="SearchResults" rendered="{!searched}" >
<!-- <apex:pageblocktable value="{!lstcourse}" var="c">
<apex:column value="{!c.Name}"/>
<apex:column value="{!c.Course_Name__c}"/>
</apex:pageblocktable>
<apex:pageblocktable value="{!DealsMap}" var="d">
<apex:column value="{!d.Name}"/>
<apex:column value="{!d.Course__c}"/>
<apex:column value="{!d.Fees_Finalized__c}"/>
</apex:pageblocktable>
-->
<apex:pageBlock >
<apex:repeat value="{!DealsMap}" var="d">
{!d}<br/><br/>
<apex:repeat value="{!DealsMap[d]}" var="d1">
{!d1.name} <br/><br/>
</apex:repeat>
</apex:repeat>
</apex:pageBlock>
<apex:pageblockbuttons >
<apex:commandButton value="edit" action="{!edit}"/>
</apex:pageblockbuttons>
</apex:pageBlock>
</apex:form>
</apex:page>
You have to initiate the DealsMap in search method. Otherwise you will get the null pointer exception.
add the below in search method:
DealsMap = new Map<id, Training_Deal__c>();
Thanks,
Maharajan.C
All Answers
You have have used
System.debug(deal.Course__c + ' - ' + deal.Name + ' - ' + deal.Fees_Finalized__c ); .... is it giving any Training_Deals__c data??
It might be possible that when you are using this query
select ID,Name,Course_Name__c,
(select ID,Name,Course__c,Fees_Finalized__c from Training_Deals__r) from Course_Master__c
Course_Master__c does not have any related Training_Deals__r record.
Please check . Have a null check before putting data into your map.
Thanks!
for ( Training_Deal__c deal : crs.Training_Deals__r ) {
System.debug(deal.Course__c + ' - ' + deal.Name + ' - ' + deal.Fees_Finalized__c );
You are not getting any data in crs.Training_Deals__r. That's why you are getting error.
Please mark it as Best Answer if it helps you.
Thanks & Regards
Suraj Tripathi
I have checked whether crs list has values or not.Yes crs list has values inside it.
You have have used
System.debug(deal.Course__c + ' - ' + deal.Name + ' - ' + deal.Fees_Finalized__c ); .... is it giving any Training_Deals__c data??
Yes it has Training_Deals__r data which is sub query in the main SOQL query.
Thanks for replying!
You have to initiate the DealsMap in search method. Otherwise you will get the null pointer exception.
add the below in search method:
DealsMap = new Map<id, Training_Deal__c>();
Thanks,
Maharajan.C
Thank you for helping!!!I appreciate it.......Error is gone.....Code is working :)