6
Answers

Can someone else fix my problem? Please

My dearest friends,
 
Please I am facing the System.NullReferenceException in Program.cs. It says that "EventManager.NoArgumentInvoker.get returned null" how should I suppose to do? Please, can someone can else fix my exception. Any help will be very very appreciated. Please fix my error.
 
This is the code of Program.cs:
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Diagnostics;  
  4. using System.Linq;  
  5. using System.Text;  
  6. using System.Threading.Tasks;  
  7. using UnityEngine;  
  8. namespace ProgrammingAssignment3  
  9. {  
  10. /// <summary>  
  11. /// Programming Assignment 3  
  12. /// </summary>  
  13. class Program  
  14. {  
  15. // test case to run  
  16. static int testCaseNumber;  
  17. // debug log messages  
  18. static List<string> logMessages = new List<string>();  
  19. /// <summary>  
  20. /// Tests the Programming Assignment 3 classes  
  21. /// </summary>  
  22. /// <param name="args">command-line args</param>  
  23. static void Main(string[] args)  
  24. {  
  25. // listen for Unity debug log events  
  26. UnityEngine.Debug.LogEvent.AddListener(HandleLogEvent);  
  27. // create Invoker and Listener  
  28. Invoker invoker = new Invoker();  
  29. Listener listener = new Listener();  
  30. // Awake is always called before Start  
  31. invoker.Awake();  
  32. // loop while there's more input  
  33. string input = Console.ReadLine();  
  34. while (input[0] != 'q')  
  35. {  
  36. // extract test case number from string  
  37. GetInputValueFromString(input);  
  38. // execute selected test case  
  39. switch (testCaseNumber)  
  40. {  
  41. case 1:  
  42. // invoker added to event manager first for no argument event  
  43. InitializeTestCase(invoker, listener);  
  44. EventManager.NoArgumentInvoker.InvokeNoArgumentEvent();  
  45. if (logMessages[0] == "MessageEvent" &&  
  46. logMessages.Count == 1)  
  47. {  
  48. Console.WriteLine("Passed");  
  49. }  
  50. else  
  51. {  
  52. Console.WriteLine("FAILED");  
  53. }  
  54. break;  
  55. case 2:  
  56. logMessages.Clear();  
  57. EventManager.ClearInvokersAndListeners();  
  58. // listener added to event manager first for no argument event  
  59. listener.Start();  
  60. invoker.Start();  
  61. EventManager.NoArgumentInvoker.InvokeNoArgumentEvent();  
  62. if (logMessages[0] == "MessageEvent" &&  
  63. logMessages.Count == 1)  
  64. {  
  65. Console.WriteLine("Passed");  
  66. }  
  67. else  
  68. {  
  69. Console.WriteLine("FAILED");  
  70. }  
  71. break;  
  72. case 3:  
  73. // invoker added to event manager first for one argument event  
  74. InitializeTestCase(invoker, listener);  
  75. EventManager.IntArgumentInvoker.InvokeOneArgumentEvent(-1);  
  76. if (logMessages[0] == "CountMessageEvent: -1" &&  
  77. logMessages.Count == 1)  
  78. {  
  79. Console.WriteLine("Passed");  
  80. }  
  81. else  
  82. {  
  83. Console.WriteLine("FAILED");  
  84. }  
  85. break;  
  86. case 4:  
  87. logMessages.Clear();  
  88. EventManager.ClearInvokersAndListeners();  
  89. // listener added to event manager first for one argument event  
  90. listener.Start();  
  91. invoker.Start();  
  92. EventManager.IntArgumentInvoker.InvokeOneArgumentEvent(-1);  
  93. if (logMessages[0] == "CountMessageEvent: -1" &&  
  94. logMessages.Count == 1)  
  95. {  
  96. Console.WriteLine("Passed");  
  97. }  
  98. else  
  99. {  
  100. Console.WriteLine("FAILED");  
  101. }  
  102. break;  
  103. case 5:  
  104. InitializeTestCase(invoker, listener);  
  105. // invoke no argument event directly through invoker  
  106. invoker.InvokeNoArgumentEvent();  
  107. if (logMessages[0] == "MessageEvent" &&  
  108. logMessages.Count == 1)  
  109. {  
  110. Console.WriteLine("Passed");  
  111. }  
  112. else  
  113. {  
  114. Console.WriteLine("FAILED");  
  115. }  
  116. break;  
  117. case 6:  
  118. InitializeTestCase(invoker, listener);  
  119. // invoke one argument event directly through invoker  
  120. invoker.InvokeOneArgumentEvent(-1);  
  121. if (logMessages[0] == "CountMessageEvent: -1" &&  
  122. logMessages.Count == 1)  
  123. {  
  124. Console.WriteLine("Passed");  
  125. }  
  126. else  
  127. {  
  128. Console.WriteLine("FAILED");  
  129. }  
  130. break;  
  131. case 7:  
  132. InitializeTestCase(invoker, listener);  
  133. // invoke multiple no argument events directly through invoker  
  134. invoker.InvokeNoArgumentEvent();  
  135. invoker.InvokeNoArgumentEvent();  
  136. invoker.InvokeNoArgumentEvent();  
  137. if (logMessages[0] == "MessageEvent" &&  
  138. logMessages[1] == "MessageEvent" &&  
  139. logMessages[2] == "MessageEvent" &&  
  140. logMessages.Count == 3)  
  141. {  
  142. Console.WriteLine("Passed");  
  143. }  
  144. else  
  145. {  
  146. Console.WriteLine("FAILED");  
  147. }  
  148. break;  
  149. case 8:  
  150. InitializeTestCase(invoker, listener);  
  151. // invoke multiple one argument events directly through invoker  
  152. invoker.InvokeOneArgumentEvent(1);  
  153. invoker.InvokeOneArgumentEvent(2);  
  154. invoker.InvokeOneArgumentEvent(3);  
  155. if (logMessages[0] == "CountMessageEvent: 1" &&  
  156. logMessages[1] == "CountMessageEvent: 2" &&  
  157. logMessages[2] == "CountMessageEvent: 3" &&  
  158. logMessages.Count == 3)  
  159. {  
  160. Console.WriteLine("Passed");  
  161. }  
  162. else  
  163. {  
  164. Console.WriteLine("FAILED");  
  165. }  
  166. break;  
  167. case 9:  
  168. InitializeTestCase(invoker, listener);  
  169. // invoke combination of events directly through invoker  
  170. invoker.InvokeOneArgumentEvent(1);  
  171. invoker.InvokeNoArgumentEvent();  
  172. invoker.InvokeOneArgumentEvent(3);  
  173. if (logMessages[0] == "CountMessageEvent: 1" &&  
  174. logMessages[1] == "MessageEvent" &&  
  175. logMessages[2] == "CountMessageEvent: 3" &&  
  176. logMessages.Count == 3)  
  177. {  
  178. Console.WriteLine("Passed");  
  179. }  
  180. else  
  181. {  
  182. Console.WriteLine("FAILED");  
  183. }  
  184. break;  
  185. case 10:  
  186. InitializeTestCase(invoker, listener);  
  187. // invoke multiple one argument events directly through invoker  
  188. invoker.InvokeNoArgumentEvent();  
  189. invoker.InvokeOneArgumentEvent(2);  
  190. invoker.InvokeNoArgumentEvent();  
  191. if (logMessages[0] == "MessageEvent" &&  
  192. logMessages[1] == "CountMessageEvent: 2" &&  
  193. logMessages[2] == "MessageEvent" &&  
  194. logMessages.Count == 3)  
  195. {  
  196. Console.WriteLine("Passed");  
  197. }  
  198. else  
  199. {  
  200. Console.WriteLine("FAILED");  
  201. }  
  202. break;  
  203. }  
  204. input = Console.ReadLine();  
  205. }  
  206. }  
  207. /// <summary>  
  208. /// Extracts the test case number from the given input string  
  209. /// </summary>  
  210. /// <param name="input">input string</param>  
  211. static void GetInputValueFromString(string input)  
  212. {  
  213. testCaseNumber = int.Parse(input);  
  214. }  
  215. /// <summary>  
  216. /// Handles the log event from the Debug mock  
  217. /// </summary>  
  218. /// <param name="message">message to log</param>  
  219. static void HandleLogEvent(string message)  
  220. {  
  221. logMessages.Add(message);  
  222. }  
  223. /// <summary>  
  224. /// Initializes test case  
  225. /// </summary>  
  226. static void InitializeTestCase(Invoker invoker, Listener listener)  
  227. {  
  228. logMessages.Clear();  
  229. EventManager.ClearInvokersAndListeners();  
  230. invoker.Start();  
  231. listener.Start();  
  232. }  
  233. }  
  234. }
This is the CountMessageEvent.cs
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using System.Threading.Tasks;  
  6. using UnityEngine.Events;  
  7. namespace ProgrammingAssignment3  
  8. {  
  9. public class CountMessageEvent : UnityEvent <int>  
  10. {  
  11. }  
  12. }  
This is the listener.cs
  1. using System.Collections;  
  2. using System.Collections.Generic;  
  3. using UnityEngine;  
  4. /// <summary>  
  5. /// An event listener  
  6. /// </summary>  
  7. public class Listener : MonoBehaviour  
  8. {  
  9. /// <summary>  
  10. /// Use this for initialization  
  11. /// </summary>  
  12. public void Start()  
  13. {  
  14. // add your code here  
  15. Invoker invoker = new Invoker();  
  16. invoker.AddNoArgumentListener(HandleMessageEvent);  
  17. invoker.AddOneArgumentListener(HandleCountMessageEvent);  
  18. }  
  19. /// <summary>  
  20. /// Handles the no argument event  
  21. /// </summary>  
  22. void HandleMessageEvent()  
  23. {  
  24. print("MessageEvent");  
  25. }  
  26. /// <summary>  
  27. /// Handles the one argument event  
  28. /// </summary>  
  29. /// <param name="number">number</number>  
  30. void HandleCountMessageEvent(int number)  
  31. {  
  32. print("CountMessageEvent: " + number);  
  33. }  
  34. }
This is the Invoker.cs
  1. using ProgrammingAssignment3;  
  2. using System.Collections;  
  3. using System.Collections.Generic;  
  4. using UnityEngine;  
  5. using UnityEngine.Events;  
  6. /// <summary>  
  7. /// An event invoker  
  8. /// </summary>  
  9. public class Invoker : MonoBehaviour  
  10. {  
  11. // add your fields for your message event support here  
  12. Timer MessageTimer;  
  13. MessageEvent messageEvent;  
  14. // add your fields for your count message event support here  
  15. int count;  
  16. Timer CountMessageTimer;  
  17. CountMessageEvent countMessageEvent = new CountMessageEvent();  
  18. /// <summary>  
  19. /// Awake is called before Start  
  20. /// </summary>  
  21. public void Awake()  
  22. {  
  23. // add your code here  
  24. messageEvent = new MessageEvent();  
  25. }  
  26. /// <summary>  
  27. /// Use this for initialization  
  28. /// </summary>  
  29. public void Start()  
  30. {  
  31. // add your code here  
  32. MessageTimer = gameObject.AddComponent<Timer>();  
  33. MessageTimer.Duration = 1;  
  34. MessageTimer.Run();  
  35. }  
  36. /// <summary>  
  37. /// Update is called once per frame  
  38. /// </summary>  
  39. void Update()  
  40. {  
  41. // add your code here  
  42. if (MessageTimer.Finished)  
  43. {  
  44. messageEvent.Invoke();  
  45. MessageTimer.Run();  
  46. }  
  47. }  
  48. /// <summary>  
  49. /// Adds the given listener to the no argument event  
  50. /// </summary>  
  51. /// <param name="listener">listener</param>  
  52. public void AddNoArgumentListener(UnityAction listener)  
  53. {  
  54. // add your code here to add the given listener for  
  55. // the message event  
  56. //MessageEvent messageEvent = new MessageEvent();  
  57. messageEvent = new MessageEvent();  
  58. messageEvent.AddListener(listener);  
  59. }  
  60. /// <summary>  
  61. /// Adds the given listener to the one argument event  
  62. /// </summary>  
  63. /// <param name="listener">listener</param>  
  64. public void AddOneArgumentListener(UnityAction<int> listener)  
  65. {  
  66. // add your code here to add the given listener for  
  67. // the count message event  
  68. countMessageEvent.AddListener(listener);  
  69. }  
  70. /// <summary>  
  71. /// Removes the given listener to the no argument event  
  72. /// </summary>  
  73. /// <param name="listener">listener</param>  
  74. public void RemoveNoArgumentListener(UnityAction listener)  
  75. {  
  76. // add your code here to remove the given listener from the  
  77. // message event  
  78. messageEvent.RemoveListener(listener);  
  79. }  
  80. /// <summary>  
  81. /// Removes the given listener to the one argument event  
  82. /// </summary>  
  83. /// <param name="listener">listener</param>  
  84. public void RemoveOneArgumentListener(UnityAction<int> listener)  
  85. {  
  86. // add your code here to remove the given listener from the  
  87. // count message event  
  88. countMessageEvent.RemoveListener(listener);  
  89. }  
  90. /// <summary>  
  91. /// Invokes the no argument event  
  92. ///  
  93. /// NOTE: We need this public method for the autograder to work  
  94. /// </summary>  
  95. public void InvokeNoArgumentEvent()  
  96. {  
  97. // add your code here to invoke the message event  
  98. messageEvent.Invoke();  
  99. }  
  100. /// <summary>  
  101. /// Invokes the one argument event  
  102. ///  
  103. /// NOTE: We need this public method for the autograder to work  
  104. /// </summary>  
  105. /// <param name="argument">argument to use for the Invoke</param>  
  106. public void InvokeOneArgumentEvent(int argument)  
  107. {  
  108. // add your code here to invoke the count message event  
  109. // with the given argument  
  110. countMessageEvent.Invoke(argument);  
  111. }  
  112. }
This is the EventManager.cs
  1. using System.Collections;  
  2. using System.Collections.Generic;  
  3. using UnityEngine;  
  4. using UnityEngine.Events;  
  5. /// <summary>  
  6. /// The event manager  
  7. /// </summary>  
  8. public static class EventManager  
  9. {  
  10. // DON'T change the fields, properties, or ClearInvokersAndListeners  
  11. // method; if you do, you'll break the autograder!  
  12. // All your work in this class is in the last 4 methods  
  13. #region Fields  
  14. // no argument event support  
  15. static Invoker noArgumentInvoker;  
  16. static UnityAction noArgumentListener;  
  17. // int argument event support  
  18. static Invoker intArgumentInvoker;  
  19. static UnityAction<int> intArgumentListener;  
  20. #endregion  
  21. #region Properties (for autograder use only)  
  22. /// <summary>  
  23. /// Gets the no argument invoker  
  24. /// </summary>  
  25. public static Invoker NoArgumentInvoker  
  26. {  
  27. get { return noArgumentInvoker; }  
  28. }  
  29. /// <summary>  
  30. /// Gets the no argument listener  
  31. /// </summary>  
  32. public static UnityAction NoArgumentListener  
  33. {  
  34. get { return noArgumentListener; }  
  35. }  
  36. /// <summary>  
  37. /// Gets the int argument invoker  
  38. /// </summary>  
  39. public static Invoker IntArgumentInvoker  
  40. {  
  41. get { return intArgumentInvoker; }  
  42. }  
  43. /// <summary>  
  44. /// Gets the int argument listener  
  45. /// </summary>  
  46. public static UnityAction<int> IntArgumentListener  
  47. {  
  48. get { return intArgumentListener; }  
  49. }  
  50. #endregion  
  51. #region Public methods  
  52. /// <summary>  
  53. /// Clears all the invokers and listeners from the event manager.  
  54. ///  
  55. /// Note: We need this functionality so the autograder can start with  
  56. /// a "clean" event manager at the start of each test case  
  57. /// </summary>  
  58. public static void ClearInvokersAndListeners()  
  59. {  
  60. // no argument invoker and listener  
  61. if (noArgumentInvoker != null)  
  62. {  
  63. if (noArgumentListener != null)  
  64. {  
  65. noArgumentInvoker.RemoveNoArgumentListener(noArgumentListener);  
  66. noArgumentListener = null;  
  67. }  
  68. noArgumentInvoker = null;  
  69. }  
  70. // int argument invoker and listener  
  71. if (intArgumentInvoker != null)  
  72. {  
  73. if (intArgumentListener != null)  
  74. {  
  75. intArgumentInvoker.RemoveOneArgumentListener(intArgumentListener);  
  76. intArgumentListener = null;  
  77. }  
  78. intArgumentInvoker = null;  
  79. }  
  80. }  
  81. /// <summary>  
  82. /// Adds the invoker for the no argument event  
  83. /// </summary>  
  84. /// <param name="invoker">invoker</param>  
  85. public static void AddNoArgumentInvoker(Invoker invoker)  
  86. {  
  87. // add your code here  
  88. noArgumentInvoker = invoker;  
  89. }  
  90. /// <summary>  
  91. /// Adds the listener for the no argument event  
  92. /// </summary>  
  93. /// <param name="listener">listener</param>  
  94. public static void AddNoArgumentListener(UnityAction listener)  
  95. {  
  96. // add your code here  
  97. listener= noArgumentListener;  
  98. }  
  99. /// <summary>  
  100. /// Adds the invoker for the int argument event  
  101. /// </summary>  
  102. /// <param name="invoker">invoker</param>  
  103. public static void AddIntArgumentInvoker(Invoker invoker)  
  104. {  
  105. // add your code here  
  106. invoker= intArgumentInvoker;  
  107. }  
  108. /// <summary>  
  109. /// Adds the listener for the int argument event  
  110. /// </summary>  
  111. /// <param name="listener">listener</param>  
  112. public static void AddIntArgumentListener(UnityAction<int> listener)  
  113. {  
  114. // add your code here  
  115. intArgumentListener = listener;  
  116. }  
  117. #endregion  
  118. }
This is the code of MessageEvent.cs
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using System.Threading.Tasks;  
  6. using UnityEngine.Events;  
  7. namespace ProgrammingAssignment3  
  8. {  
  9. public class MessageEvent : UnityEvent  
  10. {  
  11. }  
  12. }  
After implementing that, I faced this exception...
 
 
 
Please fix my error hurry. My work will be dued in Aug 3. Please help and fix my error and I will appreciate for your fix...
 
I also uploaded the zip file to see my full code...

Answers (6)

4
Photo of Kaung Htet Kyaw
1.6k 80 7k 4y
Oh I forgot. This is the Unity Game coding.
4
Photo of Kaung Htet Kyaw
1.6k 80 7k 4y
Yes. Salman. But I want to know where is this happening... Can you explain me, please?
3
Photo of Ashutosh Gupta
392 3.9k 1.1m 4y
it seems you are missing call of Eventmanager.AddNoArgumentListener to register listener.
3
Photo of Salman Beg
154 12.1k 623.4k 4y
EventManager.NoArgumentInvoker.InvokeNoArgumentEvent(); this methods null and you can check by putting debugger. Thanks.
3
Photo of Salman Beg
154 12.1k 623.4k 4y
Hi.
The error is saying, Object reference not set to an instance of an object which means in that particular line it is getting null value and you need to check by debugging why it is getting null.
Check this link it may help you,
 
https://www.youtube.com/watch?v=GwtevbSLuXQ 
 
Thanks. 
2
Photo of Koustubh W
NA 10 1 4y
Hey! Did you pass the test?? I'm taking the same course and I'm struggling to find the answer to this assignment! Could you please let me see your scripts? Thank You!!