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.