1

Could you please tell me what's wrong with this code. It runs but results are not listed. I just want a simple SQLiteDB running test to finalize my another project. I assume that something wrong with ArrayList use.

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) {

}

} }

Here is main, may be I am missing something?

    `<?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical">
        <LinearLayout
            android:id="@+id/linearLayout1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Name"
                android:layout_marginLeft="5dp"
                android:layout_marginRight="5dp">
            </TextView>
            <EditText
                android:id="@+id/et"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1">
                <requestFocus>
                </requestFocus>
            </EditText>
        </LinearLayout>
        <LinearLayout
            android:id="@+id/linearLayout2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <Button
                android:id="@+id/btnAdd"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:onClick="onButtonClick"
                android:text="Add">
            </Button>
            <Button
                android:id="@+id/btnRead"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:onClick="onButtonClick"
                android:text="Read">
            </Button>
            <Button
                android:id="@+id/btnClear"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:onClick="onButtonClick"
                android:text="Clear">
            </Button>
            <Button
                android:id="@+id/btnShow"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:onClick="onButtonClick"
                android:text="Show">
            </Button>
        </LinearLayout>
         <ListView
            android:id="@+id/lvMain"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
        </ListView>
    </LinearLayout>`
4

3 回答 3

0
values = new ArrayList<String>();

valuesnull

改变:

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(); 



}

}

于 2012-10-11T18:06:27.440 回答
0

尝试调用ArrayAdapter.notifyDataSetChanged(). 这告诉ListView底层数据已经改变,它应该失效。

于 2012-10-11T17:25:54.047 回答
0

在 onClick() 方法的最后尝试调用adapter.notifyDataSetChanged();这会刷新所有使用适配器为视图设置值的视图。

于 2012-10-11T17:28:29.470 回答