function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
coolkrishcoolkrish 

Wrapper class: error attempt to de-reference a null object

Hi,

I am invoking a wrapper class to display fields from multiple objects in a pop-up window.
I am getting Attempt to de-reference a null object error at line 22.Please help.
Below is the apex class and VFP:

apex class:

public class show_RepAccess_GILD {

    public List<wrapper> wrapperList {get; set;}
    public List<TSF_vod__c> tsfList = new List<TSF_vod__c>();
    public List<User> listOfUsrs = new List<User>();
    List<String> TerrNames = new List<String>();
    List<Id> TerrIds = new List<Id>();
    public  id accid{get;set;}
 

    public show_RepAccess_GILD(ApexPages.StandardController controller)
     {
        accid = ApexPages.currentPage().getParameters().get('id');
          fetchTSFList();
         System.debug('v tsfList:' + tsfList);
         System.debug('v listOfUsrs:' + listOfUsrs);
        
         if(tsfList.size()>0) {
           for(TSF_vod__c tsf : tsfList)
             {
            wrapper w = new wrapper(tsf);                    
            wrapperList.add(w);                        
            }  
         }
         
        
         if(listOfUsrs.size()>0) {
             for(User usr: listOfUsrs)
            {
            wrapper w = new wrapper(usr);
            wrapperList.add(w);
            }             
         }
        
     }
    
    public void fetchTSFList(){
           
        Map<Id, Id> mapUsrTerr = new Map<Id, Id>();                
        List<UserTerritory> listOfUsrTerrsIds = new List<UserTerritory>();
            
            tsfList =[select Territory_vod__c,Rep_Access_GILD__c from TSF_vod__c where Account_vod__c = :accid ];
               for(TSF_vod__c tl:tsfList) {
                   TerrNames.add(tl.Territory_vod__c);             
               }
                   
           //Query in Territory Object for Ids
            List<Territory> listOfTerrs = [SELECT Id FROM Territory WHERE Name IN :TerrNames];
           
           for(Territory tr : listOfTerrs){
              TerrIds.add(tr.Id);             
            }   
           
            //Query in UserTerritory Object for User Ids
            listOfUsrTerrsIds = [SELECT Id,UserId  FROM UserTerritory WHERE TerritoryId IN :TerrIds];
    
            for(UserTerritory ut : listOfUsrTerrsIds){
              mapUsrTerr.put(ut.Id, ut.UserId);         
            }   
            //Query in User Object for the name of user
               listOfUsrs = [SELECT Name FROM User WHERE Id IN :mapUsrTerr.values()]; 
        }    
        
        
        public class wrapper
        {
            public TSF_vod__c tsf     {get; set;}
            public User usr         {get;set;}
        
            public wrapper(TSF_vod__c tsf)
            {
                this.tsf = tsf;
            }
    
            public wrapper(User usr)
            {
                this.usr = usr;
            }    
        }

    }

VFP:

<apex:page standardController="Account"  extensions="show_RepAccess_GILD" showHeader="false" sidebar="false" setup="false"  docType="html-5.0">
<apex:form >
 
     <apex:dataTable value="{!wrapperList}" var="wrapper" >
    <apex:column >
        <apex:facet name="header">Rep Access</apex:facet>
        {!wrapper.tsf.Rep_Access_GILD__c}
    </apex:column>
    <apex:column >
        <apex:facet name="header">Rep Name</apex:facet>
        {!wrapper.usr.Name}
    </apex:column>
</apex:dataTable>          

 </apex:form>
</apex:page>
 
Best Answer chosen by coolkrish
coolkrishcoolkrish
Seethal, Thanks for your reply.

A little modification to the code worked.Missing Line in bold is the cause of null pointer exception.

Working Apex code:
=================

public with sharing class show_RepAccess {

    public List<wrapper> wrapperList {get; set;}
    public  id accid{get;set;}
    public List<TSF_vod__c> tsfList = new List<TSF_vod__c>();
    public List<User> listOfUsrs = new List<User>();
    List<String> TerrNames = new List<String>();
    List<Id> TerrIds = new List<Id>();    
    Map<String, Id> mapTerr = new Map<String, Id >();                
    Map<Id, Id> mapUsrTerr = new Map<Id, Id>();     
    Map<Id, User> mapUsr = new Map<Id, User>();                       


    public show_RepAccessD(ApexPages.StandardController controller)
     {
        accid = ApexPages.currentPage().getParameters().get('id');
        fetchTSFList();
         wrapperList = new List<wrapper>();
                 
         if(tsfList.size()>0) {
           for(TSF_vod__c tsf : tsfList)
             {
                wrapper w = new wrapper(tsf);                               
              w.usr= mapUsr.get(mapUsrTerr.get(mapTerr.get(tsf.Territory_vod__c))); // parse through maps to get the Rep's name on User object.
                wrapperList.add(w);                        
            }  
         }
     }
    
    public void fetchTSFList(){ // method to parse through objects and build map to fetch Rep's name
           
        List<UserTerritory> listOfUsrTerrsIds = new List<UserTerritory>();
              
            tsfList =[select Territory_vod__c,Rep_Access_GILD__c from TSF_vod__c where Account_vod__c = :accid ];
               for(TSF_vod__c tl:tsfList) {
                   TerrNames.add(tl.Territory_vod__c);      
               }
                   
           //Query in Territory Object for Ids
            List<Territory> listOfTerrs = [SELECT Id,Name FROM Territory WHERE Name IN :TerrNames];
           
           for(Territory tr : listOfTerrs){
            mapTerr.put(tr.name,tr.id);
              TerrIds.add(tr.Id);             
            }   
           
            //Query in UserTerritory Object for User Ids
            listOfUsrTerrsIds = [SELECT Id,UserId,TerritoryId   FROM UserTerritory WHERE TerritoryId IN :TerrIds];
    
            for(UserTerritory ut : listOfUsrTerrsIds){
              mapUsrTerr.put(ut.TerritoryId , ut.UserId);
        
            }   
            //Query in User Object for the name of user
               listOfUsrs = [SELECT Id,Name FROM User WHERE Id IN :mapUsrTerr.values()]; 
             
            for(User ur : listOfUsrs){
            mapUsr.put(ur.Id,ur);
              
            }               
               
        }            
        
        public class wrapper // wrapper class
        {
            public TSF_vod__c tsf         {get; set;}
            public User usr             {get;set;}
            
             public wrapper(TSF_vod__c tsf)
            {
                this.tsf = tsf;
            }
    
            public wrapper(User usr)
            {
                this.usr = usr;
            }           
           
        }

    }

All Answers

jane1234jane1234
 hi 
this is because wrapper is having null value for user .try using map



 
jane1234jane1234
CHANGE YOU CODE IN THIS WAY


public class show_RepAccess_GILD {

    public List<wrapper> wrapperList {get; set;}
    public List<TSF_vod__c> tsfList = new List<TSF_vod__c>();
    public List<User> listOfUsrs = new List<User>();
    List<String> TerrNames = new List<String>();
    List<Id> TerrIds = new List<Id>();
    public  id accid{get;set;}
        Map<Id, Id> mapUsrTerr = new Map<Id, Id>();     


    public show_RepAccess_GILD(ApexPages.StandardController controller)
     {
        accid = ApexPages.currentPage().getParameters().get('id');
          fetchTSFList();
         System.debug('v tsfList:' + tsfList);
         System.debug('v listOfUsrs:' + listOfUsrs);
        
         if(tsfList.size()>0) {
           for(TSF_vod__c tsf : tsfList)
             {
            wrapper w = new wrapper();  
             w .tsf= tsf ;
           w.usr=mapUsrTerr.get(mapTerr.get(tsf.name)); 
            wrapperList.add(w);                        
            }  
         }

         
        
        
        
     }
    
    public void fetchTSFList(){
           
        List<UserTerritory> listOfUsrTerrsIds = new List<UserTerritory>();
              Map<Id, Territory> mapTerr = new Map<Id, TSF_vod__c >();                
            tsfList =[select Territory_vod__c,Rep_Access_GILD__c from TSF_vod__c where Account_vod__c = :accid ];
               for(TSF_vod__c tl:tsfList) {
                   TerrNames.add(tl.Territory_vod__c);      

               }
                   
           //Query in Territory Object for Ids
            List<Territory> listOfTerrs = [SELECT Id,Name FROM Territory WHERE Name IN :TerrNames];
           
           for(Territory tr : listOfTerrs){
            mapTerr.put(tr.name,tr.id);
              TerrIds.add(tr.Id);             
            }   

           
            //Query in UserTerritory Object for User Ids
            listOfUsrTerrsIds = [SELECT Id,UserId,TerritoryId   FROM UserTerritory WHERE TerritoryId IN :TerrIds];
    
            for(UserTerritory ut : listOfUsrTerrsIds){
              mapUsrTerr.put(ut.TerritoryId , ut.UserId);
        
            }   

            //Query in User Object for the name of user
               listOfUsrs = [SELECT Name FROM User WHERE Id IN :mapUsrTerr.values()]; 
        }    
        
        
        public class wrapper
        {
            public TSF_vod__c tsf     {get; set;}
            public User usr         {get;set;}
        
           
        }

    }
coolkrishcoolkrish
Seethal, Thanks for your reply.

A little modification to the code worked.Missing Line in bold is the cause of null pointer exception.

Working Apex code:
=================

public with sharing class show_RepAccess {

    public List<wrapper> wrapperList {get; set;}
    public  id accid{get;set;}
    public List<TSF_vod__c> tsfList = new List<TSF_vod__c>();
    public List<User> listOfUsrs = new List<User>();
    List<String> TerrNames = new List<String>();
    List<Id> TerrIds = new List<Id>();    
    Map<String, Id> mapTerr = new Map<String, Id >();                
    Map<Id, Id> mapUsrTerr = new Map<Id, Id>();     
    Map<Id, User> mapUsr = new Map<Id, User>();                       


    public show_RepAccessD(ApexPages.StandardController controller)
     {
        accid = ApexPages.currentPage().getParameters().get('id');
        fetchTSFList();
         wrapperList = new List<wrapper>();
                 
         if(tsfList.size()>0) {
           for(TSF_vod__c tsf : tsfList)
             {
                wrapper w = new wrapper(tsf);                               
              w.usr= mapUsr.get(mapUsrTerr.get(mapTerr.get(tsf.Territory_vod__c))); // parse through maps to get the Rep's name on User object.
                wrapperList.add(w);                        
            }  
         }
     }
    
    public void fetchTSFList(){ // method to parse through objects and build map to fetch Rep's name
           
        List<UserTerritory> listOfUsrTerrsIds = new List<UserTerritory>();
              
            tsfList =[select Territory_vod__c,Rep_Access_GILD__c from TSF_vod__c where Account_vod__c = :accid ];
               for(TSF_vod__c tl:tsfList) {
                   TerrNames.add(tl.Territory_vod__c);      
               }
                   
           //Query in Territory Object for Ids
            List<Territory> listOfTerrs = [SELECT Id,Name FROM Territory WHERE Name IN :TerrNames];
           
           for(Territory tr : listOfTerrs){
            mapTerr.put(tr.name,tr.id);
              TerrIds.add(tr.Id);             
            }   
           
            //Query in UserTerritory Object for User Ids
            listOfUsrTerrsIds = [SELECT Id,UserId,TerritoryId   FROM UserTerritory WHERE TerritoryId IN :TerrIds];
    
            for(UserTerritory ut : listOfUsrTerrsIds){
              mapUsrTerr.put(ut.TerritoryId , ut.UserId);
        
            }   
            //Query in User Object for the name of user
               listOfUsrs = [SELECT Id,Name FROM User WHERE Id IN :mapUsrTerr.values()]; 
             
            for(User ur : listOfUsrs){
            mapUsr.put(ur.Id,ur);
              
            }               
               
        }            
        
        public class wrapper // wrapper class
        {
            public TSF_vod__c tsf         {get; set;}
            public User usr             {get;set;}
            
             public wrapper(TSF_vod__c tsf)
            {
                this.tsf = tsf;
            }
    
            public wrapper(User usr)
            {
                this.usr = usr;
            }           
           
        }

    }
This was selected as the best answer