小弟新手,求大家帮忙看看点击按钮后,可以将数据存到表里,然后在listview中显示出来
可是我点了没用啊,更郁闷的是一开始可以的,现在没法用
到底出了什么情况,求帮助public class MyDatabaseHelper extends SQLiteOpenHelper{

 final String CREAT_TABLE_SQL =
 "CREATE TABLE dict (_id integer primary key, month integer, day integer, data varchar)";
 public MyDatabaseHelper(Context context, String name, int version) {
  super(context, name, null, version);
 }
 @Override
 public void onCreate(SQLiteDatabase db) {
  // TODO Auto-generated method stub
  System.out.println("create a database");
  //execSQL用于执行SQL语句
  db.execSQL(CREAT_TABLE_SQL);
 }
 
 @Override
 public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
  // TODO Auto-generated method stub
  System.out.println("upgrade a database");
 }
}
public class MainActivity extends Activity {

final MyDatabaseHelper dbhelper = new MyDatabaseHelper(this ,"my.db3",1);

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button insert = (Button)findViewById(R.id.insert);
show();

insert.setOnClickListener(new OnClickListener()
{ @Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
String month1 =                ((EditText)findViewById(R.id.emonth)).getText().toString();
int month2 = Integer.parseInt(month1);
String day1 = ((EditText)findViewById(R.id.eday)).getText().toString();
int day2 = Integer.parseInt(day1);
String data = ((EditText)findViewById(R.id.edata)).getText().toString();
SQLiteDatabase db=dbhelper.getReadableDatabase();
String insert_sql="INSERT into dict(month, day, data) values ('"+month2+"','"+day2+"','"+data+"')";
                db.execSQL(insert_sql);
                show();
}      
});

}

protected void show()
{
SQLiteDatabase db=dbhelper.getReadableDatabase();
Cursor cursor = db.rawQuery("SELECT * from dict", null);
        ListView lv = (ListView)findViewById(R.id.show);
        SimpleCursorAdapter listAdapter = new SimpleCursorAdapter(
MainActivity.this,R.layout.line,cursor,
new String[]{"month","day","data"},
new int[]{R.id.textView1,R.id.textView2,R.id.textView3});
        lv.setAdapter(listAdapter);
        cursor.close();
}
@Override
protected void onDestroy()
{
// TODO Auto-generated method stub
super.onDestroy();
if (dbhelper != null)
{
dbhelper.close();
}
}

解决方案 »

  1.   

    自己顶下
    顺便说下导出了数据库my.db3,用sqlite3查了下表有了数据也有了select语句也没问题
      

  2.   

    在show()方法里面加一句listAdapter.notifyDatasetChange()试试。
    感觉是因为你onCreate里面已经show()了一次,绑定了一个无数据的空表,点击按钮的时候又调用show()方法又重新绑定了一次,但是并没有手动刷新。因此其实数据库里面有数据,但是界面没有刷新显示效果。
    把绑定adapter单独拿出来吧,SimpleCursorAdapter只需要绑定一次就够了,以后直接调用notifyChange或者notifyDatasetChange就可以刷新界面了,只要Cursor不close的情况下。