1

I am developing a simple registration page. Data will be stored in SQLite on clicking save button. There is another button Show to show the SQLite data in a ListView. Here are my all java files.

MainActivity.java

public class MainActivity extends AppCompatActivity {

    EditText Name,Rollno,Class,Marks;
    Button Save, Show;
    DatabaseHandler dbHelper;
    RadioButton Male,Female;
    List<UserDatabase> Users = new ArrayList<UserDatabase>();
    String gender;




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Name = (EditText)findViewById(R.id.tvname);
        Rollno = (EditText)findViewById(R.id.tvroll);
        Class = (EditText)findViewById(R.id.tvclass);
        Marks = (EditText)findViewById(R.id.tvmarks);
        Male=(RadioButton)findViewById(R.id.radiomale);
        Female= (RadioButton)findViewById(R.id.radiofemale);
        Save= (Button)findViewById(R.id.btn_save);
        Show=(Button)findViewById(R.id.btn_show);

        dbHelper = new DatabaseHandler(getApplicationContext());
        Save.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String name = Name.getText().toString();
                String rollno= Rollno.getText().toString();
                String className = Class.getText().toString();
                String marks = Marks.getText().toString();
                if(Male.isChecked()){
                    gender = Male.getText().toString() ;
                }
                else if(Female.isChecked()) {
                    gender = Female.getText().toString();

                }

                dbHelper.createUser(new UserDatabase(name,rollno,className,gender,marks));
                resetField();
                Toast.makeText(MainActivity.this,"Data Saved",Toast.LENGTH_SHORT).show();

            }
        });

        Show.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent listPage = new Intent(MainActivity.this,ListPage.class);
                startActivity(listPage);
            }
        });


    }





   /* private boolean userExists(UserDatabase user)
    {
        String name = user.getUsername();
        int userCount = Users.size();
        for (int i = 0; i < userCount; i++)
        {
            if (name.compareToIgnoreCase(Users.get(i).getUsername()) ==0)
                return true;
        }
        return false;
    }*/
   public void resetField() {

       Name.setText(null);
       Rollno.setText(null);
       Class.setText(null);
       Male.setText(null);
       Marks.setText(null);
       Female.setText(null);
   }


}

ListPage.java

public class ListPage extends AppCompatActivity{
    DatabaseHandler dbHelper;
    Context context;
    List<UserDatabase> databaseArrayList;
    ArrayAdapter<UserDatabase> mAdapter;
    ListView listView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listitem);

        listView = (ListView) findViewById(R.id.list_item);
        dbHelper = new DatabaseHandler(getApplicationContext());

        databaseArrayList = dbHelper.getAllUsers();

        mAdapter = new ArrayAdapter(context,R.layout.listitem,databaseArrayList);
        listView.setAdapter(mAdapter);

    }
}

DatabaseHelper.java

public class DatabaseHandler extends SQLiteOpenHelper {

    private static final int DATABASE_VERSION = 1;

    private static final String DATABASE_NAME = "student",
            TABLE_USERS = "Users",
            KEY_ID = "id",
            KEY_NAME = "name",
            KEY_ROLLNO = "rollno",
            KEY_CLASS = "class",
            KEY_GENDER = "gender",
            KEY_MARKS = "marks";


    public DatabaseHandler(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE " + TABLE_USERS + " (" + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + KEY_NAME + " TEXT," + KEY_ROLLNO + " TEXT " + KEY_CLASS + " TEXT," + KEY_GENDER + " TEXT," + KEY_MARKS+"TEXT)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_USERS);

        onCreate(db);
    }

    public void createUser(UserDatabase user)
    {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();

        values.put(KEY_NAME, user.getName());
        values.put(KEY_ROLLNO, user.getRollno());
        values.put(KEY_CLASS, user.getClassName());
        values.put(KEY_GENDER, user.getGender());
        values.put(KEY_MARKS, user.getMarks());


        db.insert(TABLE_USERS, null, values);
        db.close();
    }

   /* public UserDatabase getUser(int id)
    {
        SQLiteDatabase db = getReadableDatabase();

        Cursor cursor = db.query(TABLE_USERS, new String[] { KEY_UID, KEY_USERNAME, KEY_PASSWORD}, KEY_UID + "=?", new String[] { String.valueOf(id)},null, null, null, null);

        if (cursor != null)
            cursor.moveToFirst();

        UserDatabase user = new UserDatabase(Integer.parseInt(cursor.getString(0)),cursor.getString(1), cursor.getString(2));
        db.close();
        cursor.close();
        return user;
    }*/



    public int getUserCount()
    {
        SQLiteDatabase db = getReadableDatabase();
        Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_USERS, null);
        int count = cursor.getCount();
        db.close();
        cursor.close();

        return count;
    }



    public List<UserDatabase> getAllUsers()
    {
        List<UserDatabase> users = new ArrayList<UserDatabase>();

        SQLiteDatabase db = getWritableDatabase();
        Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_USERS, null);
        if (cursor.moveToFirst()) {
            do {
                users.add(new     UserDatabase(cursor.getString(0),cursor.getString(1), cursor.getString(2) ,cursor.getString(3),cursor.getString(4)));
            }
            while (cursor.moveToNext());
        }
        cursor.close();
        db.close();
        return users;
    }
}

CustomAdapter.java

public class CustomAdapter extends ArrayAdapter<UserDatabase> {
    // Cursor cursor;
    Context context;
    int Rid;
    List<UserDatabase> databaseArrayList ;

    public CustomAdapter(Context context, List<UserDatabase> databaseArrayList) {
        super(context,0,databaseArrayList);

        this.context = context;

        this.databaseArrayList = databaseArrayList;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        UserDatabase user = getItem(position);
        // Check if an existing view is being reused, otherwise inflate the view
        ViewHolder viewHolder; // view lookup cache stored in tag
        if (convertView == null) {
            viewHolder = new ViewHolder();
            LayoutInflater inflater = LayoutInflater.from(getContext());
            convertView = inflater.inflate(R.layout.listitem, parent, false);
            viewHolder.textName = (TextView) convertView.findViewById(R.id.textName);
            //viewHolder.home = (TextView) convertView.findViewById(R.id.tvHome);
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }
        // Populate the data into the template view using the data object
        viewHolder.textName.setText(user.getName());
       // viewHolder.home.setText(user.hometown);
        // Return the completed view to render on screen
        return convertView;
    }

    private static class ViewHolder{

        TextView textName;
    }

}

On clicking Show button I am getting these errors. LogCat

04-26 14:33:02.452 1617-1617/com.example.vishal.studentdatabase E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.vishal.studentdatabase, PID: 1617
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.vishal.studentdatabase/com.example.vishal.studentdatabase.ListPage}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2367)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2419)
at android.app.ActivityThread.access$800(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1342)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:5323)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:828)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:644)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at android.widget.ArrayAdapter.init(ArrayAdapter.java:310)
at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:153)
at com.example.vishal.studentdatabase.ListPage.onCreate(ListPage.java:32)
at android.app.Activity.performCreate(Activity.java:5343)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2331)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2419) 
at android.app.ActivityThread.access$800(ActivityThread.java:151) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1342) 
at android.os.Handler.dispatchMessage(Handler.java:110) 
at android.os.Looper.loop(Looper.java:193) 
at android.app.ActivityThread.main(ActivityThread.java:5323) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:515) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:828) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:644) 
at dalvik.system.NativeStart.main(Native Method)

 Any help would be appreciated.

Sharad Chauhan
  • 4,821
  • 2
  • 25
  • 50

2 Answers2

1

In ListPage.java your context is null so you should initialize it before using for prevent NullPointerExeption

public class ListPage extends AppCompatActivity{
    ...
    Context context;
    ...
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listitem);

        context = this;
        ...

        mAdapter = new ArrayAdapter(context,R.layout.listitem,databaseArrayList);
        listView.setAdapter(mAdapter);

    }
}
Linh
  • 57,942
  • 23
  • 262
  • 279
1

Try this.

Add context = getApplicationContext() in onCreate().

public class ListPage extends AppCompatActivity{
    DatabaseHandler dbHelper;
    Context context;
    List<UserDatabase> databaseArrayList;
    ArrayAdapter<UserDatabase> mAdapter;
    ListView listView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listitem);
        context = getApplicationContext();
        listView = (ListView) findViewById(R.id.list_item);
        dbHelper = new DatabaseHandler(getApplicationContext());
        databaseArrayList = dbHelper.getAllUsers();
        mAdapter = new ArrayAdapter(context,R.layout.listitem,databaseArrayList);
        listView.setAdapter(mAdapter);
    }
}
Jay Rathod
  • 11,131
  • 6
  • 34
  • 58
Nguyễn Trung Hiếu
  • 2,004
  • 1
  • 10
  • 22