Note that there are some explanatory texts on larger screens.

plurals
  1. PONullPointerException when trying to get input for a serializable object
    text
    copied!<p>I have 3 classes: Main, ContactLibrary, and ContactInfo. ContactLibrary contains an ArrayList called myPhoneBook. ContactInfo is made up of a bunch of strings containing name, address, etc.</p> <p>The user wants to search for a name, for example, or anything involving input. The input is done from within the ContactLibrary and ContactInfo classes--both serializable objects.</p> <p>I get a NPE error when it hits that point, however.</p> <pre><code>You have 3 entry(s) saved to disc. Hello, and welcome to Team 6's contact list. What would you like to do? Enter the corresponding number of choice. 1: Add an entry to the contact list. 2: Print the entire contact list. 3: Search for a contact. 4: Exit the program. Please enter a number from 1-4. 3 What would you like to search by? Exception in thread "main" java.lang.NullPointerException at ContactLibrary.searchByCriteria(ContactLibrary.java:62) at Main.optionsPrompt(Main.java:62) at Main.main(Main.java:25) 1: Last Names. 2: Emails. 3: Zip codes. </code></pre> <p>What am I to do?</p> <p>Here is my Main: <a href="http://ideone.com/uvfK4U" rel="nofollow">http://ideone.com/uvfK4U</a> (Contains the other two classes in the top comments) Here is a UML diagram: <a href="http://imgur.com/9W3TS" rel="nofollow">http://imgur.com/9W3TS</a></p> <p>The ContactLibrary class, as requested:</p> <pre><code>/** * ContactLibrary, when constructed, creates an ArrayList of ContactLibrary * references called myPhoneBook. Every index is made to fill in objects * of ContactInfo, which contains entries and credentials. * * Contains methods to create a new entry, search and print by criteria, and print list. */ import java.util.*; public class ContactLibrary implements java.io.Serializable { private static final long serialVersionUID = 1L; private ArrayList&lt;ContactInfo&gt; myPhoneBook; private Scanner libraryInput = new Scanner(System.in); /** Constructs the ArrayList that will hold references to ContactInfo. */ public ContactLibrary() { myPhoneBook = new ArrayList&lt;ContactInfo&gt;(); } /** * Adds an entry to the ArrayList and utilizes the set methods in * ContactInfo. */ public void addEntry() { int doAgain = 1; do { myPhoneBook.add(new ContactInfo()); System.out.println("Would you like to enter another contact?"); System.out.println("1: Yes."); System.out.println("2: No."); doAgain = libraryInput.nextInt(); } while (doAgain == 1); } /** * Goes through every index in myPhoneBook and runs ArrayList.get() on them. */ public void printList() { for (int i = 0; i &lt; myPhoneBook.size(); i++) { System.out.println(myPhoneBook.get(i)); } } /** Counts the number of objects within myPhoneBook and returns a string. */ public String scanDisc() { int entryCount = myPhoneBook.size(); return "You have " + entryCount + " entry(s) saved to disc.\n"; } /** * The prompt for having the user search the database via criteria. Asks the * user to enter in their search criteria. */ public void searchByCriteria() { String criteria; //libraryInput = new Scanner("System.in"); int subSubMenuChoice = 0; System.out.println("What would you like to search by?"); System.out.println("1: Last Names."); System.out.println("2: Emails."); System.out.println("3: Zip codes."); subSubMenuChoice = libraryInput.nextInt(); switch (subSubMenuChoice) { case 1: System.out .println("Please enter the last name you'd like to search for:"); criteria = libraryInput.next(); searchByLastName(criteria); break; case 2: System.out .println("Please enter the e-mail you'd like to search for:"); criteria = libraryInput.next(); searchByEmail(criteria); break; case 3: System.out .println("Please enter the zip code you'd like to search for:"); criteria = libraryInput.next(); searchByZip(criteria); break; default: System.out.println("Exiting"); break; } } /** * Loops through every element in the array and returns a toString of that * index for comparing with the search criteria via contains(). */ public void searchByEmail(String criteria) { for (int i = 0; i &lt; myPhoneBook.size(); i++) { if (criteria.compareTo((myPhoneBook.get(i)).getEmail()) == 0) { System.out.println(myPhoneBook.get(i)); } else { System.out.print(""); } } } /** * Loops through every element in the array and returns a toString of that * index for comparing with the search criteria via contains(). */ public void searchByLastName(String criteria) { for (int i = 0; i &lt; myPhoneBook.size(); i++) { if (criteria.compareTo((myPhoneBook.get(i)).getLastName()) == 0) { System.out.println(myPhoneBook.get(i)); } else { System.out.print(""); } } } /** * Loops through every element in the array and returns a toString of that * index for comparing with the search criteria via contains(). */ public void searchByZip(String criteria) { for (int i = 0; i &lt; myPhoneBook.size(); i++) { if (criteria.compareTo((myPhoneBook.get(i)).getZipcode()) == 0) { System.out.println(myPhoneBook.get(i)); } else { System.out.print(""); } } } /** Reorganizes the array in order by last name. */ public void sortData() { Collections.sort(myPhoneBook); } } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload