Заполнить ListView из базы данных SQLite в onCreate() в Android

#java #android #android-listview #android-sqlite

#java #Android #android-listview #android-sqlite

Вопрос:

Я создал действия «А» и «В».Я вставил некоторые данные в действие «A», и я хочу отобразить все данные в listview в действии «B» при нажатии кнопки в действии «A».Но когда я запускаю приложение, оно выходит из строя и выдает ошибку и исключение NullPointerException.Пожалуйста, помогите мне.Заранее спасибо.

Вот мой код метода базы данных.

 public Cursor employeeName(){
            ArrayList<Employee> EmployeeNameList = new ArrayList<Employee>();
            String selectQuery = "SELECT * FROM "   EMPLOYEE_DETAILS_TABLE;
            SQLiteDatabase db = this.getWritableDatabase();
            Cursor cursor = db.rawQuery(selectQuery, null);
            if(cursor.moveToFirst())
            {
                do{

                    Employee empName = new Employee();
                    empName.setName(cursor.getString(1));
                    empName.setDepartment(cursor.getString(2));
                    empName.setDesignation(cursor.getString(3));


                    EmployeeNameList.add(empName);
                } while(cursor.moveToNext());
            }
            return cursor;
        }




        public List<String> getAllEmployeeName() {
            List<String> labels = new ArrayList<String>();

               // Select All Query
               String selectQuery = "SELECT  * FROM "   EMPLOYEE_DETAILS_TABLE;

               SQLiteDatabase db = this.getReadableDatabase();
               Cursor cursor = db.rawQuery(selectQuery, null);
               if (cursor.moveToFirst()) {
                   do {
                    labels.add(cursor.getString(1));
                   } while (cursor.moveToNext());
               }

              cursor.close();
               db.close();
            return labels;


        }
 

Вот мой код активности

 public class Employee_List extends ListActivity
{
    DatabaseHelper databaseHelper;
    Context context;
    Employee emp;

    protected SQLiteDatabase db;
    protected Cursor cursor;
    protected ListAdapter adapter;


    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.staff_employee_list);
        populateListView(); 
   }

    private void populateListView() 
    {
        DatabaseHelper databaseHelper = new DatabaseHelper(context);
        db = (new DatabaseHelper(this)).getWritableDatabase();
        Cursor cursor =(Cursor) databaseHelper.employeeName();
        String[] fromFieldNames = new String[]
        {databaseHelper.Staff_Employee_Name,databaseHelper.Department,databaseHelper.Designation};
        int[] toViewIDs = new int[]
        {R.id.textViewEmpName, R.id.textViewDepartmet, R.id.textViewDesignation};
        SimpleCursorAdapter myCursorAdapter;
        myCursorAdapter = new SimpleCursorAdapter(getBaseContext(), R.layout.staff_employee_list_item, cursor, fromFieldNames, toViewIDs);
        ListView myList = (ListView) findViewById(android.R.id.list);
        myList.setAdapter(myCursorAdapter);
        }


}
 

Вот мой журнал регистрации.

 06-27 15:25:51.498: E/AndroidRuntime(12033): FATAL EXCEPTION: main
06-27 15:25:51.498: E/AndroidRuntime(12033): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.employee_review/com.employee_review.Employee_List}: java.lang.NullPointerException
06-27 15:25:51.498: E/AndroidRuntime(12033):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
06-27 15:25:51.498: E/AndroidRuntime(12033):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
06-27 15:25:51.498: E/AndroidRuntime(12033):    at android.app.ActivityThread.access$1500(ActivityThread.java:117)
06-27 15:25:51.498: E/AndroidRuntime(12033):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
06-27 15:25:51.498: E/AndroidRuntime(12033):    at android.os.Handler.dispatchMessage(Handler.java:99)
06-27 15:25:51.498: E/AndroidRuntime(12033):    at android.os.Looper.loop(Looper.java:123)
06-27 15:25:51.498: E/AndroidRuntime(12033):    at android.app.ActivityThread.main(ActivityThread.java:3683)
06-27 15:25:51.498: E/AndroidRuntime(12033):    at java.lang.reflect.Method.invokeNative(Native Method)
06-27 15:25:51.498: E/AndroidRuntime(12033):    at java.lang.reflect.Method.invoke(Method.java:507)
06-27 15:25:51.498: E/AndroidRuntime(12033):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
06-27 15:25:51.498: E/AndroidRuntime(12033):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
06-27 15:25:51.498: E/AndroidRuntime(12033):    at dalvik.system.NativeStart.main(Native Method)
06-27 15:25:51.498: E/AndroidRuntime(12033): Caused by: java.lang.NullPointerException
06-27 15:25:51.498: E/AndroidRuntime(12033):    at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:118)
06-27 15:25:51.498: E/AndroidRuntime(12033):    at com.employee_review.DatabaseHelper.employeeName(DatabaseHelper.java:129)
06-27 15:25:51.498: E/AndroidRuntime(12033):    at com.employee_review.Employee_List.populateListView(Employee_List.java:35)
06-27 15:25:51.498: E/AndroidRuntime(12033):    at com.employee_review.Employee_List.onCreate(Employee_List.java:28)
06-27 15:25:51.498: E/AndroidRuntime(12033):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
06-27 15:25:51.498: E/AndroidRuntime(12033):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
06-27 15:25:51.498: E/AndroidRuntime(12033):    ... 11 more
 

Комментарии:

1. пожалуйста, опубликуйте трассировку стека и отметьте строку, в которой возникает ошибка

2. @ OpiatefuchsCursor курсор =(Курсор) DatabaseHelper.EmployeeName();

3. Opiatefuchs: Почему бы не отобразить мой listview из sqlite, пожалуйста, помогите мне.

Ответ №1:

Здесь context вы передаете вспомогательный конструктор базы данных не инициализируется:

 DatabaseHelper databaseHelper = new DatabaseHelper(context);
 

context Заменить, например this .