关闭应用后,Sqlite数据不会显示

时间:2014-09-27 17:32:14

标签: android sqlite

这是我的MainActivity。

公共类MainActivity扩展了Activity {

EditText etName, etEmail;
DatabaseHelper dbHelper;
Button save;

// declare view
ListView lvEmployees;
// declare adapter
CustomizedAdapter adapter;

// datasource

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    etName = (EditText) findViewById(R.id.etName);
    etEmail = (EditText) findViewById(R.id.etEmail);
    save = (Button) findViewById(R.id.btnSave);
    lvEmployees = (ListView) findViewById(R.id.lvEmployees);
    dbHelper = new DatabaseHelper(this);
    save.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            save(v);

        }
    });

}

public void save(View v) {
    String name = etName.getText().toString();
    String email = etEmail.getText().toString();

    Employee employee = new Employee(name, email);
    Toast.makeText(getApplicationContext(), employee.toString(),
            Toast.LENGTH_LONG).show();

    long inserted = dbHelper.insertEmployee(employee);
    if (inserted >= 0) {
        Toast.makeText(getApplicationContext(), "Data inserted",
                Toast.LENGTH_LONG).show();
    } else {
        Toast.makeText(getApplicationContext(), "Data insertion failed...",
                Toast.LENGTH_LONG).show();
    }

    ArrayList<Employee> employees = dbHelper.getAllEmployees();
    if (employees != null && employees.size() > 0) {
        adapter = new CustomizedAdapter(this, employees);
        lvEmployees.setAdapter(adapter);

    }
}

}

这是我的DataBaseHelper。

公共类DatabaseHelper扩展了SQLiteOpenHelper {

public static final String DB_NAME = "task_management";
public static final int DB_VERSION = 1;

public static final String EMPLOYEE_TABLE = "employee";
public static final String ID_FIELD = "_id";
public static final String NAME_FIELD = "name";
public static final String EMAIL_FIELD = "email";


public static final String EMPLOYEE_TABLE_SQL = "CREATE TABLE "
        + EMPLOYEE_TABLE + " (" + ID_FIELD + " INTEGER PRIMARY KEY, "
        + NAME_FIELD + " TEXT, " + EMAIL_FIELD + " DATETIME);";


public DatabaseHelper(Context context) {
    super(context, DB_NAME, null, DB_VERSION);

}

@Override
public void onCreate(SQLiteDatabase db) {
    // create tables
    db.execSQL(EMPLOYEE_TABLE_SQL);
    Log.e("TABLE CREATE", EMPLOYEE_TABLE_SQL);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // upgrade logic

}

// insert
public long insertEmployee(Employee emp) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put(NAME_FIELD, emp.getName());
    values.put(EMAIL_FIELD, emp.getEmail());
    long inserted = db.insert(EMPLOYEE_TABLE, null, values);

    db.close();
    return inserted;
}

// query
public ArrayList<Employee> getAllEmployees() {
    ArrayList<Employee> allEmployees = new ArrayList<Employee>();
    SQLiteDatabase db = this.getReadableDatabase();

    // String[] columns={NAME_FIELD, EMAIL_FIELD, PHONE_FIELD};
    // SELECT * FROM EMPLOYEE;
    Cursor cursor = db.query(EMPLOYEE_TABLE, null, null, null, null, null,
            null);

    // Cursor cursor = db.rawQuery("SELECT * FROM EMPLOYEE", null);
    if (cursor != null && cursor.getCount() > 0) {
        cursor.moveToFirst();
        for (int i = 0; i < cursor.getCount(); i++) {
            //
            int id = cursor.getInt(cursor.getColumnIndex(ID_FIELD));
            String name = cursor.getString(cursor
                    .getColumnIndex(NAME_FIELD));
            String email = cursor.getString(cursor
                    .getColumnIndex(EMAIL_FIELD));
            Employee e = new Employee(id, name, email);
            allEmployees.add(e);
            cursor.moveToNext();
        }
    }
    cursor.close();
    db.close();

    return allEmployees;
}

}

当我输入数据并按下保存按钮时,我的数据被保存并显示在我的ListView中。 但是,当我关闭应用程序并打开它时,我在ListView中看不到任何数据。 放入数据并按下保存按钮后,我的新视图和现有数据显示在我的ListView中。 那么在打开我的应用程序后如何在ListView中显示我现有的数据并且不按下保存按钮。

2 个答案:

答案 0 :(得分:0)

如果您希望每次应用启动时都显示数据,则需要在onCreate

中移动列表填充代码

将此代码移至onCreate而不是保存按钮&#39; s onClick

ArrayList<Employee> employees = dbHelper.getAllEmployees();
if (employees != null && employees.size() > 0) {
    adapter = new CustomizedAdapter(this, employees);
    lvEmployees.setAdapter(adapter);
}

希望它有所帮助。

P.S:如果您需要在“保存”按钮单击后重新填充列表,请创建一个包含此代码的单独函数。并在onCreate以及保存按钮onClick

中调用tha函数

答案 1 :(得分:0)

您正在保存方法中为列表视图设置适配器,只有在您实际按下保存按钮时才会调用该适配器。这是您执行此操作的部分。

    ArrayList<Employee> employees  = dbHelper.getAllEmployees();
    if (employees != null && employees.size() > 0) {
        adapter = new CustomizedAdapter(this, employees);
        lvEmployees.setAdapter(adapter);

    }

这就是为什么打开应用程序时列表视图中没有数据的原因。

您应该在onCreate方法中执行此操作,并且在保存时,您应该执行以下操作: 1.声明员工的arraylist以及listview;

 ArrayList<Employee> employees;
    在你的oncreate中
  1. 调用你应该从保存方法中删除的代码

        employees  = dbHelper.getAllEmployees();
        if (employees != null && employees.size() > 0) {
            adapter = new CustomizedAdapter(this, employees);
            lvEmployees.setAdapter(adapter);
    
        }
    
  2. 保存方法中的
  3. 只需在列表中添加一个项目,并通知适配器它正在显示的数据发生了变化。

    employees.add(雇员);     adapter.notifyDataSetChanged();