Android 带ArrayList和ArrayAdapter的SQLite
你能告诉我这个密码有什么问题吗。它运行,但未列出结果。我只需要一个简单的SQLiteDB运行测试来完成我的另一个项目。我假设ArrayList的使用有问题Android 带ArrayList和ArrayAdapter的SQLite,android,sqlite,arraylist,android-arrayadapter,Android,Sqlite,Arraylist,Android Arrayadapter,你能告诉我这个密码有什么问题吗。它运行,但未列出结果。我只需要一个简单的SQLiteDB运行测试来完成我的另一个项目。我假设ArrayList的使用有问题 public class MainActivity extends Activity { String names; ListView lvMain; ArrayList<String> values; ArrayAdapter<String> adapter; DBHelper dbHelper; EditTex
public class MainActivity extends Activity {
String names;
ListView lvMain;
ArrayList<String> values;
ArrayAdapter<String> adapter;
DBHelper dbHelper;
EditText et;
Button btnAdd;
Button btnRead;
Button btnClear;
Button btnShow;
Cursor c;
int nameColIndex;
int idColIndex;
/**
* Called when the activity is first created.
*/
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnAdd = (Button) findViewById(R.id.btnAdd);
btnRead = (Button) findViewById(R.id.btnRead);
btnClear = (Button) findViewById(R.id.btnClear);
btnShow = (Button) findViewById(R.id.btnShow);
dbHelper = new DBHelper(this);
lvMain = (ListView) findViewById(R.id.lvMain);
values = new ArrayList<String>();
}
public void onButtonClick(View v) {
ContentValues cv = new ContentValues();
String name = et.getText().toString();
SQLiteDatabase db = dbHelper.getWritableDatabase();
switch (v.getId()) {
case R.id.btnAdd:
cv.put("name", name);
// вставляем запись и получаем ее ID
long rowID = db.insert("mytable", null, cv);
break;
case R.id.btnRead:
// делаем запрос всех данных из таблицы mytable, получаем Cursor
c = db.query("mytable", null, null, null, null, null, null);
// ставим позицию курсора на первую строку выборки
// если в выборке нет строк, вернется false
if (c.moveToFirst()) {
// определяем номера столбцов по имени в выборке
idColIndex = c.getColumnIndex("id");
nameColIndex = c.getColumnIndex("name");
do {
// получаем значения по номерам столбцов
c.getInt(idColIndex);
names = c.getString(nameColIndex);
values.add(names);
// переход на следующую строку
// а если следующей нет (текущая - последняя), то false - выходим из цикла
} while (c.moveToNext());
} else {
c.close();
}
break;
case R.id.btnClear:
// удаляем все записи
int clearCount = db.delete("mytable", null, null);
break;
case R.id.btnShow:
break;
}
// закрываем подключение к БД
adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, values);
lvMain.setAdapter(adapter);
dbHelper.close();
adapter.notifyDataSetChanged();
}
class DBHelper extends SQLiteOpenHelper {
public DBHelper(Context context) {
// конструктор суперкласса
super(context, "myDB", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
// создаем таблицу с полями
db.execSQL("create table mytable ("
+ "id integer primary key autoincrement,"
+ "name text,"
+ "email text" + ");");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
dbHelper = new DBHelper(this);
lvMain = (ListView) findViewById(R.id.lvMain);
values = new ArrayList<String>();
}
public void onButtonClick(View v) {
ContentValues cv = new ContentValues();
String name = et.getText().toString();
SQLiteDatabase db = dbHelper.getWritableDatabase();
switch (v.getId()) {
case R.id.btnAdd:
cv.put("name", name);
long rowID = db.insert("mytable", null, cv);
break;
case R.id.btnRead:
c = db.query("mytable", null, null, null, null, null, null);
if (c.moveToFirst()) {
idColIndex = c.getColumnIndex("id");
nameColIndex = c.getColumnIndex("name");
do {
c.getInt(idColIndex);
names = c.getString(nameColIndex);
values.add(names);
} while (c.moveToNext());
} else {
c.close();
}
break;
case R.id.btnClear:
int clearCount = db.delete("mytable", null, null);
break;
case R.id.btnShow:
break;
}
adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, values);
lvMain.setAdapter(adapter);
dbHelper.close();
adapter.notifyDataSetChanged();
}
}
}
dbHelper = new DBHelper(this);
lvMain = (ListView) findViewById(R.id.lvMain);
values = new ArrayList<String>();
}
public void onButtonClick(View v) {
ContentValues cv = new ContentValues();
String name = et.getText().toString();
SQLiteDatabase db = dbHelper.getWritableDatabase();
switch (v.getId()) {
case R.id.btnAdd:
cv.put("name", name);
long rowID = db.insert("mytable", null, cv);
break;
case R.id.btnRead:
c = db.query("mytable", null, null, null, null, null, null);
if (c.moveToFirst()) {
idColIndex = c.getColumnIndex("id");
nameColIndex = c.getColumnIndex("name");
do {
c.getInt(idColIndex);
names = c.getString(nameColIndex);
values.add(names);
} while (c.moveToNext());
} else {
c.close();
}
break;
case R.id.btnClear:
int clearCount = db.delete("mytable", null, null);
break;
case R.id.btnShow:
break;
}
adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, values);
lvMain.setAdapter(adapter);
dbHelper.close();
adapter.notifyDataSetChanged();
}
试着打电话。这会告诉ListView基础数据已更改,它应该无效。在onClick方法的末尾,尝试调用adapter.notifyDataSetChanged;这将刷新所有使用适配器设置视图值的视图
values = new ArrayList<String>();
dbHelper = new DBHelper(this);
lvMain = (ListView) findViewById(R.id.lvMain);
values = new ArrayList<String>();
}
public void onButtonClick(View v) {
ContentValues cv = new ContentValues();
String name = et.getText().toString();
SQLiteDatabase db = dbHelper.getWritableDatabase();
switch (v.getId()) {
case R.id.btnAdd:
cv.put("name", name);
long rowID = db.insert("mytable", null, cv);
break;
case R.id.btnRead:
c = db.query("mytable", null, null, null, null, null, null);
if (c.moveToFirst()) {
idColIndex = c.getColumnIndex("id");
nameColIndex = c.getColumnIndex("name");
do {
c.getInt(idColIndex);
names = c.getString(nameColIndex);
values.add(names);
} while (c.moveToNext());
} else {
c.close();
}
break;
case R.id.btnClear:
int clearCount = db.delete("mytable", null, null);
break;
case R.id.btnShow:
break;
}
adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, values);
lvMain.setAdapter(adapter);
dbHelper.close();
adapter.notifyDataSetChanged();
}
}我收到了,但还是没收到。你能发布你的更新代码吗?或者使用适配器的add方法。您已经添加了main.xml。可能是我遗漏了什么。你在哪里打电话给db.open方法我已经按照你的建议试过了。Evene将DBHelper放在main活动中。当我按add时应用程序崩溃。我已经找到了答案。谢谢大家的时间和努力。
dbHelper = new DBHelper(this);
lvMain = (ListView) findViewById(R.id.lvMain);
values = new ArrayList<String>();
}
public void onButtonClick(View v) {
ContentValues cv = new ContentValues();
String name = et.getText().toString();
SQLiteDatabase db = dbHelper.getWritableDatabase();
switch (v.getId()) {
case R.id.btnAdd:
cv.put("name", name);
long rowID = db.insert("mytable", null, cv);
break;
case R.id.btnRead:
c = db.query("mytable", null, null, null, null, null, null);
if (c.moveToFirst()) {
idColIndex = c.getColumnIndex("id");
nameColIndex = c.getColumnIndex("name");
do {
c.getInt(idColIndex);
names = c.getString(nameColIndex);
values.add(names);
} while (c.moveToNext());
} else {
c.close();
}
break;
case R.id.btnClear:
int clearCount = db.delete("mytable", null, null);
break;
case R.id.btnShow:
break;
}
adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, values);
lvMain.setAdapter(adapter);
dbHelper.close();
adapter.notifyDataSetChanged();
}