使用数据库对象时出现Nullpointerexception [英] Nullpointerexception when using database object
本文介绍了使用数据库对象时出现Nullpointerexception的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我是Android新手,我遇到了一些问题。它看起来像是说有一个空对象传递给它,但我不确定。哪里错过了一步?任何帮助表示赞赏。
提前致谢。
Logcat:
I'm new to Android, and i've got some issues. It looks like it's saying that's having an null object passed to it, but I'm not sure. Where I missed a step? Any help is appreciated.
Thanks in advance.
Logcat:
06-11 20:17:16.544 32506-32506/com.androidtutorialpoint.employeemanagementsystem E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.androidtutorialpoint.employeemanagementsystem, PID: 32506
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.androidtutorialpoint.employeemanagementsystem/com.androidtutorialpoint.employeemanagementsystem.AddUpdateEmployee}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.Cursor android.database.sqlite.SQLiteDatabase.query(java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String, java.lang.String)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2358)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2420)
at android.app.ActivityThread.access$900(ActivityThread.java:154)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5294)
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:904)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)
at
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.Cursor android.database.sqlite.SQLiteDatabase.query(java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String, java.lang.String)' on a null object reference
at com.androidtutorialpoint.employeemanagementsystem.DB.EmployeeOperations.getEmployee(EmployeeOperations.java:63)
at com.androidtutorialpoint.employeemanagementsystem.AddUpdateEmployee.initializeEmployee(AddUpdateEmployee.java:142)
at com.androidtutorialpoint.employeemanagementsystem.AddUpdateEmployee.onCreate(AddUpdateEmployee.java:68)
at android.app.Activity.performCreate(Activity.java:5990)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2311)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2420)
at android.app.ActivityThread.access$900(ActivityThread.java:154)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5294)
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:904) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)
EmployeeOperations:
EmployeeOperations:
package com.androidtutorialpoint.employeemanagementsystem.DB;
public class EmployeeOperations {
public static final String LOGTAG = "EMP_MNGMNT_SYS";
SQLiteOpenHelper dbhandler;
SQLiteDatabase database;
private static final String[] allColumns = {
EmployeeDBHandler.COLUMN_ID,
EmployeeDBHandler.COLUMN_FIRST_NAME,
EmployeeDBHandler.COLUMN_LAST_NAME,
EmployeeDBHandler.COLUMN_GENDER,
EmployeeDBHandler.COLUMN_HIRE_DATE,
EmployeeDBHandler.COLUMN_DEPT
};
public EmployeeOperations(Context context){
dbhandler = new EmployeeDBHandler(context);
}
public void open(){
Log.i(LOGTAG,"Database Opened");
database = dbhandler.getWritableDatabase();
}
public void close(){
Log.i(LOGTAG, "Database Closed");
dbhandler.close();
}
public Employee addEmployee(Employee Employee){
ContentValues values = new ContentValues();
values.put(EmployeeDBHandler.COLUMN_FIRST_NAME,Employee.getFirstname());
values.put(EmployeeDBHandler.COLUMN_LAST_NAME,Employee.getLastname());
values.put(EmployeeDBHandler.COLUMN_GENDER, Employee.getGender());
values.put(EmployeeDBHandler.COLUMN_HIRE_DATE, Employee.getHiredate());
values.put(EmployeeDBHandler.COLUMN_DEPT, Employee.getDept());
long insertid = database.insert(EmployeeDBHandler.TABLE_EMPLOYEES,null,values);
Employee.setEmpId(insertid);
return Employee;
}
// Getting single Employee
public Employee getEmployee(long id) {
Cursor cursor = database.query(EmployeeDBHandler.TABLE_EMPLOYEES,allColumns,EmployeeDBHandler.COLUMN_ID + "=?",new String[]{String.valueOf(id)},null,null, null, null);
if (cursor != null)
cursor.moveToFirst();
Employee e = new Employee(Long.parseLong(cursor.getString(0)),cursor.getString(1),cursor.getString(2),cursor.getString(3),cursor.getString(4),cursor.getString(5));
// return Employee
return e;
}
public List<Employee> getAllEmployees() {
Cursor cursor = database.query(EmployeeDBHandler.TABLE_EMPLOYEES,allColumns,null,null,null, null, null);
List<Employee> employees = new ArrayList<>();
if(cursor.getCount() > 0){
while(cursor.moveToNext()){
Employee employee = new Employee();
employee.setEmpId(cursor.getLong(cursor.getColumnIndex(EmployeeDBHandler.COLUMN_ID)));
employee.setFirstname(cursor.getString(cursor.getColumnIndex(EmployeeDBHandler.COLUMN_FIRST_NAME)));
employee.setLastname(cursor.getString(cursor.getColumnIndex(EmployeeDBHandler.COLUMN_LAST_NAME)));
employee.setGender(cursor.getString(cursor.getColumnIndex(EmployeeDBHandler.COLUMN_GENDER)));
employee.setHiredate(cursor.getString(cursor.getColumnIndex(EmployeeDBHandler.COLUMN_HIRE_DATE)));
employee.setDept(cursor.getString(cursor.getColumnIndex(EmployeeDBHandler.COLUMN_DEPT)));
employees.add(employee);
}
}
// return All Employees
return employees;
}
// Updating Employee
public int updateEmployee(Employee employee) {
ContentValues values = new ContentValues();
values.put(EmployeeDBHandler.COLUMN_FIRST_NAME, employee.getFirstname());
values.put(EmployeeDBHandler.COLUMN_LAST_NAME, employee.getLastname());
values.put(EmployeeDBHandler.COLUMN_GENDER, employee.getGender());
values.put(EmployeeDBHandler.COLUMN_HIRE_DATE, employee.getHiredate());
values.put(EmployeeDBHandler.COLUMN_DEPT, employee.getDept());
// updating row
return database.update(EmployeeDBHandler.TABLE_EMPLOYEES, values,
EmployeeDBHandler.COLUMN_ID + "=?",new String[] { String.valueOf(employee.getEmpId())});
}
// Deleting Employee
public void removeEmployee(Employee employee) {
database.delete(EmployeeDBHandler.TABLE_EMPLOYEES, EmployeeDBHandler.COLUMN_ID + "=" + employee.getEmpId(), null);
}
}
MainActivity:
MainActivity:
public class MainActivity extends AppCompatActivity{
private Button addEmployeeButton;
private Button editEmployeeButton;
private Button deleteEmployeeButton;
private Button viewAllEmployeeButton;
private EmployeeOperations employeeOps;
private static final String EXTRA_EMP_ID = "com.androidtutorialpoint.empId";
private static final String EXTRA_ADD_UPDATE = "com.androidtutorialpoint.add_update";
@Override
protected void onCreate(Bundle savedInstanceState) {
employeeOps = new EmployeeOperations(MainActivity.this);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
addEmployeeButton = (Button) findViewById(R.id.button_add_employee);
editEmployeeButton = (Button) findViewById(R.id.button_edit_employee);
deleteEmployeeButton = (Button) findViewById(R.id.button_delete_employee);
viewAllEmployeeButton = (Button)findViewById(R.id.button_view_employees);
addEmployeeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MainActivity.this,AddUpdateEmployee.class);
i.putExtra(EXTRA_ADD_UPDATE, "Add");
startActivity(i);
}
});
editEmployeeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getEmpIdAndUpdateEmp();
}
});
deleteEmployeeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getEmpIdAndRemoveEmp();
}
});
viewAllEmployeeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MainActivity.this, ViewAllEmployees.class);
startActivity(i);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.employee_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.menu_item_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
public void getEmpIdAndUpdateEmp(){
LayoutInflater li = LayoutInflater.from(this);
View getEmpIdView = li.inflate(R.layout.dialog_get_emp_id, null);
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
// set dialog_get_emp_id.xml to alertdialog builder
alertDialogBuilder.setView(getEmpIdView);
final EditText userInput = (EditText) getEmpIdView.findViewById(R.id.editTextDialogUserInput);
// set dialog message
alertDialogBuilder
.setCancelable(false)
.setPositiveButton("OK",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
// get user input and set it to result
// edit text
Intent i = new Intent(MainActivity.this,AddUpdateEmployee.class);
i.putExtra(EXTRA_ADD_UPDATE, "Update");
i.putExtra(EXTRA_EMP_ID, Long.parseLong(userInput.getText().toString()));
startActivity(i);
}
}).create()
.show();
}
public void getEmpIdAndRemoveEmp(){
LayoutInflater li = LayoutInflater.from(this);
View getEmpIdView = li.inflate(R.layout.dialog_get_emp_id, null);
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
// set dialog_get_emp_id.xml to alertdialog builder
alertDialogBuilder.setView(getEmpIdView);
final EditText userInput = (EditText) getEmpIdView.findViewById(R.id.editTextDialogUserInput);
// set dialog message
alertDialogBuilder
.setCancelable(false)
.setPositiveButton("OK",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
// get user input and set it to result
// edit text
employeeOps = new EmployeeOperations(MainActivity.this);
employeeOps.removeEmployee(employeeOps.getEmployee(Long.parseLong(userInput.getText().toString())));
Toast t = Toast.makeText(MainActivity.this,"Employee removed successfully!",Toast.LENGTH_SHORT);
t.show();
}
}).create()
.show();
}
@Override
protected void onResume() {
super.onResume();
employeeOps.open();
}
@Override
protected void onPause() {
super.onPause();
employeeOps.close();
}
}
我的尝试:
使用数据库对象时的NullPointerException
What I have tried:
NullPointerException when using database object
推荐答案
900(ActivityThread.java: 154 )
在android.app.ActivityThread
900(ActivityThread.java:154) at android.app.ActivityThread
H.handleMessage(ActivityThread.java: 1321 )
在android.os.Handler.dispatchMessage(Handler.java: 102 )
在android.os.Looper.loop( Looper.java: 135 )
在android.app.ActivityThread.main(ActivityThread.java: 5294 )
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java: 372 )
com.android.internal.os.ZygoteInit
H.handleMessage(ActivityThread.java:1321) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5294) 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: 904 )com.android.internal.os.Zy上的
goteInit.main(ZygoteInit.java: 699 )
at
引起:java.lang.NullPointerException:尝试调用虚方法' android.database.Cursor android.database.sqlite.SQLiteDatabase.query(java.lang.String,java.lang.String [] ,null。对象引用$,java.lang.String,java.lang.String [],java.lang.String,java.lang.String,java.lang.String,java.lang.String)' b $ b at com.androidtutorialpoint.employeemanagementsystem.DB.EmployeeOperations.getEmployee(EmployeeOperations.java: 63 )
at com.androidtutorialpoint.employeemanagementsystem.AddUpdateEmployee.initializeEmployee (AddUpdateEmployee.java: 142 )
at com.androidtutorialpoint.employeemanagementsystem.AddUpdateEmployee.onCreate(AddUpdateEmployee.java: 68 )
在android.app.Activity.performCreate(Activity.java: 5990 )
在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java: 1106 )
在android.app.ActivityThread .performLaunchActivity(ActivityThread.java: 2311 )
在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java: 2420 )
在android.app.ActivityThread.access
MethodAndArgsCaller.run(ZygoteInit.java:904) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699) at Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.Cursor android.database.sqlite.SQLiteDatabase.query(java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String, java.lang.String)' on a null object reference at com.androidtutorialpoint.employeemanagementsystem.DB.EmployeeOperations.getEmployee(EmployeeOperations.java:63) at com.androidtutorialpoint.employeemanagementsystem.AddUpdateEmployee.initializeEmployee(AddUpdateEmployee.java:142) at com.androidtutorialpoint.employeemanagementsystem.AddUpdateEmployee.onCreate(AddUpdateEmployee.java:68) at android.app.Activity.performCreate(Activity.java:5990) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2311) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2420) at android.app.ActivityThread.access
这篇关于使用数据库对象时出现Nullpointerexception的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文