title: android list view and array adapter null pointer exception
body: <p>I am getting data from <code>SQlite</code> db and storing it in a <code>array list</code> and filling data in list view but i am getting <code>null pointer exception</code> in <code>logcat</code> and application force closes, i don;t understanding what is the mistake, kindly somebody guide me that where i am making mistake.</p>
  
  <p>here is my activity class code:</p>
  
  <pre><code>package testing.testapp;
  
  import java.util.List;
  import android.app.Activity;
  import android.content.Context;
  import android.os.Bundle;
  import android.view.LayoutInflater;
  import android.view.View;
  import android.view.ViewGroup;
  import android.widget.ArrayAdapter;
  import android.widget.ListView;
  import android.widget.SimpleCursorAdapter;
  import android.widget.TextView;
  
  
  public class Administrator extends Activity {
  
      List&lt;User&gt; usersList;
      SimpleCursorAdapter cursorAdapter;
      List&lt;User&gt; userList;
      TextView fullName;
      TextView cellNumber;
      ListView list;
      AdministratorAdapter adapter;
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.administrator);
  
          list=(ListView)findViewById(R.id.fullname);
  
          DatabaseHandler h = new DatabaseHandler(this);
          usersList = h.getAllUsers();
  
          adapter = new AdministratorAdapter(this, R.layout.row, userList);
          list.setAdapter(adapter);
  
  
  
      }
  
  
      public class AdministratorAdapter extends ArrayAdapter&lt;User&gt;
      {
          Context context;
          Administrator holder;
          int layoutResourceId;
          List&lt;User&gt; userList;
  
  
          public AdministratorAdapter(Context context, int layoutResourceId,List&lt;User&gt; userList)
          {
              super(context, layoutResourceId, userList);         
              this.context=context;
              this.layoutResourceId=layoutResourceId;
              this.userList=userList;
          }
  
  
          @Override
          public View getView(int position,View convertView,ViewGroup parent)
          {
              View row=convertView;
  
              if(row==null)
              {
                  LayoutInflater inflater=((Activity)context).getLayoutInflater();
                  row=inflater.inflate(layoutResourceId, parent,false);
  
                  holder=new Administrator();
                  holder.fullName=(TextView)row.findViewById(R.id.fulname);
                  holder.cellNumber=(TextView)row.findViewById(R.id.mobile);
  
                  row.setTag(holder);
              }
              else
              {
                  holder=(Administrator)row.getTag();
              }
              holder.fullName.setText(userList.get(position).getUserName());
              holder.cellNumber.setText(userList.get(position).getPassword());    
              return row;
          }
  </code></pre>
  
  <p>and here is my database handling class:</p>
  
  <pre><code>package testing.testapp;
  
  import java.util.ArrayList;
  import java.util.List;
  
  import android.content.ContentValues;
  import android.content.Context;
  import android.database.Cursor;
  import android.database.sqlite.SQLiteDatabase;
  import android.database.sqlite.SQLiteOpenHelper;
  import android.util.Log;
  
  public class DatabaseHandler extends SQLiteOpenHelper {
  
      public static final int DATABASE_VERSION = 4;
  
      public static final String DATABASE_NAME = "usersManager";
  
      public static final String TABLE_USERS = "users";
  
      public static final String KEY_USER_ID = "_id";
  
      public static final String KEY_USERNAME = "username";
  
      public static final String KEY_PASSWORD = "password";
  
      public static final String KEY_ROLE = "role";
  
      public static final String KEY_GPA = "gpa";
  
      public static final String KEY_FIRST_NAME = "firstname";
  
      public static final String KEY_LAST_NAME = "lastname";
  
      public static final String KEY_GENDER = "gender";
  
      public static final String KEY_CELL_NUMBER = "cellnumber";
  
  
  
  
      public DatabaseHandler(Context context)
      {
          super(context, DATABASE_NAME, null, DATABASE_VERSION);
      }
  
  
      @Override
      public void onCreate(SQLiteDatabase db)
      {
          db.execSQL("DROP TABLE IF EXISTS " + TABLE_USERS);
          String CREATE_USERS_TABLE = "CREATE TABLE " + TABLE_USERS + "("
                 + KEY_USER_ID + " INTEGER PRIMARY KEY," + KEY_USERNAME + " TEXT,"
                 + KEY_PASSWORD +" TEXT," + KEY_ROLE + " TEXT," + KEY_GPA + " TEXT,"
                 + KEY_FIRST_NAME + " TEXT," + KEY_LAST_NAME + " TEXT," 
                 + KEY_GENDER + " TEXT," + KEY_CELL_NUMBER + " TEXT" + ")";
  
  //       String CREATE_USERS_TABLE = "create table users ("
  //          + "_id integer  primary key autoincrement, "
  //          + "username  string  not null, "
  //          + "password string  not null, "
  //          + ");";
  
          db.execSQL(CREATE_USERS_TABLE);
      }
  
  
      @Override
      public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
      {
          db.execSQL("DROP TABLE IF EXISTS " + TABLE_USERS);
  
          onCreate(db);
  
      }
  
      public void addUser(User user)
      {
          SQLiteDatabase db = this.getWritableDatabase();
          int f =db.getVersion();
  
          Log.d("version", Integer.toString(f));
          ContentValues values = new ContentValues();
          values.put(KEY_USERNAME,user.getUserName());
          values.put(KEY_PASSWORD, user.getPassword());
          values.put(KEY_ROLE, user.getRole());
  
          db.insert(TABLE_USERS, null, values);
          db.close();
  
      }
  
  
      public int Login(String username,String password,String role)
      {
          try
          {
              SQLiteDatabase db = this.getWritableDatabase();
              int i = 0;
              Cursor c = null;
              String query = "SELECT * FROM " + TABLE_USERS + " WHERE " + KEY_USERNAME+ "='" + username +"'" + " AND " +KEY_PASSWORD+ "='"+password+"'" + " AND " +KEY_ROLE+ "='"+role+"'" ; 
              //String query = "SELECT * FROM users WHERE username = '"+username+"' AND password = '"+password+"'";
              //String query = "SELECT * FROM USERS";
              c = db.rawQuery(query, null);
              c.moveToFirst();
              i = c.getCount(); 
              c.close(); 
              db.close();
              return i;
          }
          catch(Exception e)
          {
              e.printStackTrace();
          }
          return 0;
      }
  
      public void AddInfo(User user)
      {
          SQLiteDatabase db = this.getWritableDatabase();
          int f =db.getVersion();
  
          Log.d("version", Integer.toString(f));
          ContentValues values = new ContentValues();
          values.put(KEY_FIRST_NAME,user.getFirstName());
          values.put(KEY_LAST_NAME, user.getLastName());
          values.put(KEY_GENDER, user.getGender());
          values.put(KEY_GPA,user.getGpa());
          values.put(KEY_CELL_NUMBER, user.getCellNumber());
  
          db.insert(TABLE_USERS, null, values);
          db.close();
      }
  
      public List&lt;User&gt; getAllUsers()
      {
          List&lt;User&gt; usersList = new ArrayList&lt;User&gt;();
  
          String query = "SELECT * FROM " + TABLE_USERS ;
          //+ " WHERE " + KEY_ROLE+ "=Student"
  
          SQLiteDatabase db = this.getWritableDatabase();
          Cursor cursor = db.rawQuery(query, null);
          //return cursor;
          if(cursor.moveToFirst())
          {
              do
              {
              User user = new User();
              user.setUserId(Integer.parseInt(cursor.getString(0)));
              user.setUserName(cursor.getString(1));
              user.setPassword(cursor.getString(2));
              user.setRole(cursor.getString(3));
              user.setGpa(cursor.getString(4));
              user.setFirstName(cursor.getString(5));
              user.setLastName(cursor.getString(6));
              user.setGender(cursor.getString(7));
              user.setCellNumber(cursor.getString(8));
  
              usersList.add(user);
              }while(cursor.moveToNext());
  
          }
          db.close();
          return usersList;
  
      }
  
      public User getUserDetail(String username)
      {
          SQLiteDatabase db = this.getWritableDatabase();
  
          //String query = "SELECT " + KEY_USERNAME+" , " + KEY_PASSWORD + " FROM " + TABLE_USERS + " WHERE " + KEY_USERNAME + " = '" + username + "' ";
          String query = "SELECT * FROM " + TABLE_USERS;
          Cursor cursor = db.rawQuery(query, null);
  
          User user = new User();
  
          if(cursor!=null)
          {
              user.setUserId(Integer.parseInt(cursor.getString(0)));
              user.setUserName(cursor.getString(1));
              user.setPassword(cursor.getString(2));
          }
  
          return user;
  
      }
  
  }
  
  
  
      }
  
  
  
  }
  </code></pre>
  
  <p>here is my logcat :</p>
  
  <pre><code>12-06 11:05:47.651: E/AndroidRuntime(634): FATAL EXCEPTION: main
  12-06 11:05:47.651: E/AndroidRuntime(634): java.lang.RuntimeException: Unable to start activity ComponentInfo{testing.testapp/testing.testapp.Administrator}: java.lang.NullPointerException
  12-06 11:05:47.651: E/AndroidRuntime(634):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
  12-06 11:05:47.651: E/AndroidRuntime(634):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
  12-06 11:05:47.651: E/AndroidRuntime(634):  at android.app.ActivityThread.access$1500(ActivityThread.java:117)
  12-06 11:05:47.651: E/AndroidRuntime(634):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
  12-06 11:05:47.651: E/AndroidRuntime(634):  at android.os.Handler.dispatchMessage(Handler.java:99)
  12-06 11:05:47.651: E/AndroidRuntime(634):  at android.os.Looper.loop(Looper.java:123)
  12-06 11:05:47.651: E/AndroidRuntime(634):  at android.app.ActivityThread.main(ActivityThread.java:3683)
  12-06 11:05:47.651: E/AndroidRuntime(634):  at java.lang.reflect.Method.invokeNative(Native Method)
  12-06 11:05:47.651: E/AndroidRuntime(634):  at java.lang.reflect.Method.invoke(Method.java:507)
  12-06 11:05:47.651: E/AndroidRuntime(634):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
  12-06 11:05:47.651: E/AndroidRuntime(634):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
  12-06 11:05:47.651: E/AndroidRuntime(634):  at dalvik.system.NativeStart.main(Native Method)
  12-06 11:05:47.651: E/AndroidRuntime(634): Caused by: java.lang.NullPointerException
  12-06 11:05:47.651: E/AndroidRuntime(634):  at android.widget.ArrayAdapter.getCount(ArrayAdapter.java:291)
  12-06 11:05:47.651: E/AndroidRuntime(634):  at android.widget.ListView.setAdapter(ListView.java:454)
  12-06 11:05:47.651: E/AndroidRuntime(634):  at testing.testapp.Administrator.onCreate(Administrator.java:37)
  12-06 11:05:47.651: E/AndroidRuntime(634):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
  12-06 11:05:47.651: E/AndroidRuntime(634):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
  12-06 11:05:47.651: E/AndroidRuntime(634):  ... 11 more
  12-06 11:10:47.981: I/Process(634): Sending signal. PID: 634 SIG: 9
  </code></pre>