title: ERROR: Android Runtime : FATAL EXCEPTION java.lang.RuntimeException
body: <p>I am getting this Error:</p>
  
  <pre><code>05-09 23:34:04.251 21214-21214/com.example.averm.phonecontact E/AndroidRuntime: FATAL EXCEPTION: main
  Process: com.example.averm.phonecontact, PID: 21214
  java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.averm.phonecontact/com.example.averm.phonecontact.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'int com.example.averm.phonecontact.DatabaseHandler.getContactsCount()' on a null object reference
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2335)
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2397)
      at android.app.ActivityThread.access$800(ActivityThread.java:151)
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1310)
      at android.os.Handler.dispatchMessage(Handler.java:102)
      at android.os.Looper.loop(Looper.java:135)
      at android.app.ActivityThread.main(ActivityThread.java:5268)
      at java.lang.reflect.Method.invoke(Native Method)
      at java.lang.reflect.Method.invoke(Method.java:372)
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:902)
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:697)
   Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int com.example.averm.phonecontact.DatabaseHandler.getContactsCount()' on a null object reference
      at com.example.averm.phonecontact.MainActivity.onCreate(MainActivity.java:106)
      at android.app.Activity.performCreate(Activity.java:6033)
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2288)
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2397) 
      at android.app.ActivityThread.access$800(ActivityThread.java:151) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1310) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:135) 
      at android.app.ActivityThread.main(ActivityThread.java:5268) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:372) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:902) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:697)
  </code></pre>
  
  <p>My Code is:</p>
  
  <p>MainActivity.java Class :</p>
  
  <pre><code>public class MainActivity extends AppCompatActivity {
  
      private EditText nameTxt, phoneTxt, emailTxt, addressTxt;
      ImageView contactImageImgView;
      List&lt;Contact&gt; Contacts = new ArrayList&lt;Contact&gt;();
      ListView contactListView;
      Uri imageUri = Uri.parse("android.resource://org.intracode.contactmanager/drawable/no_user_logo.png");
      DatabaseHandler dbHandler;
  
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
          nameTxt = (EditText)findViewById(R.id.edName);
          phoneTxt = (EditText)findViewById(R.id.edNumber);
          emailTxt = (EditText)findViewById(R.id.edEmail);
          addressTxt = (EditText)findViewById(R.id.edAddress);
          contactListView = (ListView)findViewById(R.id.listView);
          contactImageImgView = (ImageView)findViewById(R.id.imgViewContactImage);
  
  
          TabHost tabHost = (TabHost)findViewById(R.id.tabHost);
          tabHost.setup();
          TabHost.TabSpec tabSpec = tabHost.newTabSpec("creator");
          tabSpec.setContent(R.id.tabCreator);
          tabSpec.setIndicator("Creator");
          tabHost.addTab(tabSpec);
  
          tabSpec = tabHost.newTabSpec("List");
          tabSpec.setContent(R.id.tabContactList);
          tabSpec.setIndicator("List");
          tabHost.addTab(tabSpec);
  
  
          final Button addBtn = (Button)findViewById(R.id.btnAdd);
  
          addBtn.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
                  Contact contact = new Contact(dbHandler.getContactsCount(), String.valueOf(nameTxt.getText()), String.valueOf(phoneTxt.getText()),
                          String.valueOf(emailTxt.getText()), String.valueOf(addressTxt.getText()), imageUri);
                  if (!contactExists(contact)){
                      dbHandler.createContact(contact);
                      Contacts.add(contact);
                      Toast.makeText(getApplicationContext(),String.valueOf(nameTxt.getText()) +" has been added to your Contacts!", Toast.LENGTH_SHORT).show();
                      return;
                  }
                  Toast.makeText(getApplicationContext(), String.valueOf(nameTxt.getText()) + " already exists. Please use a different name.", Toast.LENGTH_SHORT).show();
              }
          });
  
          nameTxt.addTextChangedListener(new TextWatcher() {
  
              @Override
              public void beforeTextChanged(CharSequence s, int start, int count, int after) {
  
              }
  
              @Override
              public void onTextChanged(CharSequence s, int start, int before, int count) {
                  addBtn.setEnabled(String.valueOf(nameTxt.getText()).trim().length() &gt; 0);
              }
  
              @Override
              public void afterTextChanged(Editable s) {
  
              }
          });
  
          contactImageImgView.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
                  Intent intent = new Intent();
                  intent.setType("image/*");
                  intent.setAction(Intent.ACTION_GET_CONTENT);
                  startActivityForResult(Intent.createChooser(intent, "Select Contact Image"), 1);
              }
          });
  
          if (dbHandler.getContactsCount() != 0)
              Contacts.addAll(dbHandler.getAllContacts());
          populateList();
  
      }
  
      public void onActivityResult(int reqCode, int resCode, Intent data){
          if (resCode == RESULT_OK){
              if (reqCode == 1){
                  imageUri = data.getData();
                  contactImageImgView.setImageURI(imageUri);
              }
          }
      }
  
      private boolean contactExists(Contact contact) {
          String name = contact.getName();
          int contactCount = Contacts.size();
          for (int i = 0; i &lt; contactCount; i++) {
              if (name.compareToIgnoreCase(Contacts.get(i).getName()) == 0)
                  return true;
          }
          return false;
      }
  
  
  
      private void populateList(){
          ArrayAdapter&lt;Contact&gt; adaptor= new ContactListAdaptor();
          contactListView.setAdapter(adaptor);
  
      }
  
  
      private class ContactListAdaptor extends ArrayAdapter&lt;Contact&gt;{
          public ContactListAdaptor(){
              super(MainActivity.this,R.layout.listview_item, Contacts);
          }
  
          @Override
          public View getView(int position, View view, ViewGroup parent){
              if(view == null)
                  view = getLayoutInflater().inflate(R.layout.listview_item, parent, false);
  
              Contact currentContact = Contacts.get(position);
  
              TextView name = (TextView) view.findViewById(R.id.contactName);
              name.setText(currentContact.getName());
              TextView phone = (TextView) view.findViewById(R.id.phoneNumber);
              phone.setText(currentContact.getPhone());
              TextView email = (TextView) view.findViewById(R.id.emailAddress);
              email.setText(currentContact.getEmail());
              TextView address = (TextView) view.findViewById(R.id.cAddress);
              address.setText(currentContact.getAddress());
              ImageView ivContactImage = (ImageView) view.findViewById(R.id.ivContactImage);
              ivContactImage.setImageURI(currentContact.getImageURI());
              return view;
          }
      }
  }
  </code></pre>
  
  <p>DatabaseHandler.java Class:</p>
  
  <pre><code>public class DatabaseHandler extends SQLiteOpenHelper {
  
      private static final int DATABASE_VERSION = 2;
      private static final String DATABASE_NAME = "contactManager",
              TABLE_CONTACTS = "contacts",
              KEY_ID = "id",
              KEY_NAME = "name",
              KEY_PHONE = "phone",
              KEY_EMAIL = "email",
              KEY_ADDRESS = "address",
              KEY_IMAGEURI = "imageUri";
  
      public DatabaseHandler(Context context) {
          super(context, DATABASE_NAME, null, DATABASE_VERSION);
      }
  
      @Override
      public void onCreate(SQLiteDatabase db) {
          db.execSQL("CREATE TABLE " + TABLE_CONTACTS + "(" + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + KEY_NAME + " TEXT," + KEY_PHONE + " TEXT," + KEY_EMAIL + " TEXT," + KEY_ADDRESS + " TEXT," + KEY_IMAGEURI + " TEXT)");
      }
  
      @Override
      public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
          db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS);
          onCreate(db);
      }
  
      public void createContact(Contact contact) {
          SQLiteDatabase db = getWritableDatabase();
          ContentValues values = new ContentValues();
          values.put(KEY_NAME, contact.getName());
          values.put(KEY_PHONE, contact.getPhone());
          values.put(KEY_EMAIL, contact.getEmail());
          values.put(KEY_ADDRESS, contact.getAddress());
          values.put(KEY_IMAGEURI, contact.getImageURI().toString());
          db.insert(TABLE_CONTACTS, null, values);
          db.close();
      }
  
      public Contact getContact(int id) {
          SQLiteDatabase db = getReadableDatabase();
          Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID, KEY_NAME, KEY_PHONE, KEY_EMAIL, KEY_ADDRESS, KEY_IMAGEURI }, KEY_ID + "=?", new String[] { String.valueOf(id) }, null, null, null, null );
          if (cursor != null)
              cursor.moveToFirst();
          Contact contact = new Contact(Integer.parseInt(cursor.getString(0)), cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getString(4), Uri.parse(cursor.getString(5)));
          db.close();
          cursor.close();
          return contact;
      }
  
  
  
      public int getContactsCount() {
          SQLiteDatabase db = getReadableDatabase();
          Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_CONTACTS, null);
          int count = cursor.getCount();
          db.close();
          cursor.close();
          return count;
      }
  }
  </code></pre>