2011-07-21 10 views
0

私はこの問題を研究しており、まだいくつかのことに固執しています。まず、私は3つのフィールドデータベースを取り上げてListViewに表示する方法を完全には把握していません(以前はスクロール可能なテキストビューで表示していました)。それは、2つのフィールドデータが追加ボタンとともに追加される2つの編集テキストを持っています。私がしたいのは、ListViewにDBを表示し、その行を削除するためにそのListViewに右側の各行にXが含まれていることです。最初は私はユーザーがテーブルを見て、右の排除と一致し、それを入力し、削除ボタンを押す。SQLiteDB ListView with Delete

マイDataHelper.java

public class DataHelper { 

private static final String DATABASE_NAME = "AdultSwim.db"; 
private static final int DATABASE_VERSION = 3; 
private static final String TABLE_NAME = "Requests"; 
private static final String KEY_ID = "_id"; 
private static final String field1 = "Show"; 
private static final String field2 = "Want"; 
private Context context; 
private SQLiteDatabase db; 
private SQLiteStatement insertStmt; 
private static final String INSERT = "insert into " + TABLE_NAME + "(Show) values (?)" + "(Want) values (?)"; 

public DataHelper(Context context) { 
     this.context = context; 

     OpenHelper openHelper = new OpenHelper(this.context); 
     this.db = openHelper.getWritableDatabase(); 
     this.insertStmt = this.db.compileStatement(INSERT); 
    } 

    public long insert(String name) { 
     this.insertStmt.bindString(1, name); 
     return this.insertStmt.executeInsert(); 
    } 

    public void deleteOne(Long rowId) { 
     String rownum = rowId.toString(); 
     db.delete(TABLE_NAME, KEY_ID + "=" + rowId, null); 
    } 

    public void deleteAll() { 
     this.db.delete(TABLE_NAME, null, null); 
    } 

    public List<String> selectTableData() { 
     List<String> list = new ArrayList<String>(); 
     Cursor cursor = this.db.query(TABLE_NAME, null, null, null, null, null, null, null); 

     if (cursor.moveToFirst()) { 
      do { 
       list.add(cursor.getString(0) + " " + cursor.getString(1)); 
      } while (cursor.moveToNext()); 
     } 

     if (cursor != null && !cursor.isClosed()) { 
      cursor.close(); 
     } 
     return list; 
    } 

    private static class OpenHelper extends SQLiteOpenHelper { 
     OpenHelper(Context context) { 
      super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     } 

     @Override 
     public void onCreate(SQLiteDatabase db) { 
      db.execSQL("CREATE TABLE " + TABLE_NAME + "(_id INTEGER PRIMARY KEY AUTOINCREMENT, Show VARCHAR NOT NULL, Want VARCHAR NOT NULL)"); 
     } 

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

      db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); 
      onCreate(db); 
     } 
    } 
} 

私は、これは完全に正確であるとは思いません。私はプライマリキーと1つのフィールドだけを持っていましたが、私は2番目のフィールドが追加されているとは思わない。

そして今、メインのJava

public class Item2 extends Activity { 

    private DataHelper dh; 
    private ImageView addButton; 
    private ImageView displayNames; 
    private ImageView delButton; 
    private EditText show; 
    private EditText want; 
    private Editable varTextShow; 
    private Editable varTextWant; 
    private TextView outputTable; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.item2xml); 
     dh = new DataHelper(this); 
     addButton = (ImageView) this.findViewById(R.id.btnAdd); 
     displayNames = (ImageView) this.findViewById(R.id.btnDisp); 
     delButton = (ImageView) this.findViewById(R.id.btnDel); 
     show = (EditText) this.findViewById(R.id.showTitle); 
     want = (EditText) this.findViewById(R.id.wantDegree); 
     outputTable = (TextView) this.findViewById(R.id.output); 

    addButton.setOnClickListener(new Button.OnClickListener(){ 

    @Override 
    public void onClick(View v) { 
     varTextShow = show.getEditableText(); 
     String nameEntered = varTextShow.toString(); 
     dh.insert(nameEntered); 
     show.setText(""); 
    } 
}); 

displayNames.setOnClickListener(new Button.OnClickListener(){ 
    @Override 
    public void onClick(View v) { 
     List<String> names = dh.selectTableData(); 
     StringBuilder sb = new StringBuilder(); 
     sb.append("Shows Requested:\n"); 
     for (String name : names) { 
      sb.append(name); 
      sb.append("\n"); 
     } 

      outputTable.setText(sb.toString()); 
    } 

}); 

delButton.setOnClickListener(new Button.OnClickListener(){ 

    @Override 
    public void onClick(View v){ 
     varTextShow = show.getEditableText(); 
     String rowToDelete; 
     rowToDelete = varTextShow.toString(); 
     try{ 
      Long deleteRow = Long.parseLong(rowToDelete.trim()); 
      dh.deleteOne(deleteRow); 
      show.setText(""); 
     } 
     catch (NumberFormatException e) 
     { 
      Toast toast = Toast.makeText(getBaseContext() ,"You must enter a number.",Toast.LENGTH_LONG); 
      toast.show(); 
      show.setFocusable(true); 
     } 
    } 

}); 
} 
} 

これは前に頼まれている場合、私はごめんなさい。私は答えを見て、例を見て、私はちょうどそれの周りに私の頭を包むことはできません。それは、ユーザーがデータを入力する同じスクロール可能なウィンドウにデータベースが表示されていることを意味します。

ああ、メインJavaには、2番目のフィールド(field2)が正確に組み込まれていません。

私はAndroidプログラミングの初心者です。

答えて

0

これは必ずしもすべての問題に対する回答ではありませんが、トラブルシューティングに役立ちます。

AVDが接続されているときに、端末にadbを起動することで、データベースの内容を確認することができます。

  1. オープン端子とデータベースとフォルダにadb shell
  2. CDを入力します(通常はデータ/データ/ com.yourpackage /データベース/)
  3. タイプsqlite3 <database_file_name>
  4. あなたは今まで、すべてを正しくなかった場合は、 .tablesと入力すると、すべてのテーブルが表示されます。
  5. select * from <table_name>;と入力すると、すべてのデータが表示されます。

これは、あなたがデータベースとどのようにデータが入力されますが表示されていることを、DBの開発へと順にちょっと重要です。

+0

ああ、私はそれについて知っています。私は最後のデータベースでadbシェルを使用しました。少なくとも、すべてのフィールドがデータベースに追加されているかどうかを確認する必要があります。 しかし、メインのJavaを見て、私はまだ 私用EditTextを使用する必要があることがわかります。または、編集可能なprivate varTextWant; 最新のフィールドはどれですか EDIT:私のアプリを走らせました。すべて動作しますが、メニュー項目をクリックしてデータベースに項目を追加すると、強制的に閉じられます。 – Greg

+0

ええ、私は他の問題に取り組んでいませんでした。なぜなら、データが最初に期待されるものであることを確認してから、問題を絞り込んで再度質問する必要があるからです。 –

0

deleteIco.setOnClickListener()のリストビューで削除クエリを書き込む