2011-01-23 6 views
2

사용자가 단추를 클릭하여 대화 상자를 열고, 사용자가 항목 이름을 입력하고, 확인을 클릭하여 항목이 ListView에 추가되도록하려고합니다. 지금까지 항목이 ListView에 추가되는 시점까지 갔지만 데이터를 저장할 수있는 방법은 없습니다. SQLiteDatabase를 만드는 DataHelper라는 도우미가 있지만 데이터베이스에 저장하는 방법을 알 수 없습니다. 경험이 없기 때문에 코드 예제가 필요합니다. 여기SQLiteDatabase에 ListView 항목을로드하고 저장하려면 어떻게해야합니까?

내 된 .java입니다 :

package com.shoppinglist; 

import java.util.ArrayList; 

import android.app.Dialog; 
import android.app.ListActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ListView; 

public class ShoppingList extends ListActivity { 
    /** Called when the activity is first created. */ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     ListView lv = (ListView) findViewById(android.R.id.list); 
     final ArrayList<String> items = new ArrayList<String>(); 
     final ArrayAdapter<String> adapter; 
     adapter = new ArrayAdapter<String>(
     this, android.R.layout.simple_list_item_1, items); 
     lv.setAdapter(adapter); 

     Button button1main = (Button) findViewById(R.id.add); 
     button1main.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
      final Dialog additem = new Dialog(ShoppingList.this); 
      additem.setContentView(R.layout.maindialog); 
      final EditText et = (EditText)additem.findViewById(R.id.edittext); 
      additem.setTitle("Type your item"); 
      additem.setCancelable(true); 
      et.setHint("Type the name of an item..."); 

      Button button = (Button) additem.findViewById(R.id.cancel); 
      button.setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        additem.dismiss(); 
       } 
      }); 
      additem.show(); 

      Button ok = (Button) additem.findViewById(R.id.ok); 
      ok.setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        items.add(et.getText().toString()); 
        adapter.notifyDataSetChanged(); 
        additem.dismiss(); 
        et.setText(""); 
       } 
      }); 
     } 
     }); 
    } 
} 

내 DataHelper 클래스 :

package com.shoppinglist; 

import java.util.ArrayList; 
import java.util.List; 

import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.database.sqlite.SQLiteStatement; 
import android.util.Log; 

public class DataHelper { 

    private static final String DATABASE_NAME = "items.db"; 
    private static final int DATABASE_VERSION = 1; 
    private static final String TABLE_NAME = "table1"; 

    private Context context; 
    private SQLiteDatabase db; 

    private SQLiteStatement insertStmt; 
    private static final String INSERT = "insert into " 
     + TABLE_NAME + "(name) 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 deleteAll() { 
      this.db.delete(TABLE_NAME, null, null); 
     } 

     public List<String> selectAll() { 
      List<String> list = new ArrayList<String>(); 
      Cursor cursor = this.db.query(TABLE_NAME, new String[] { "name" }, 
        null, null, null, null, "name desc"); 
      if (cursor.moveToFirst()) { 
       do { 
        list.add(cursor.getString(0)); 
       } 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, name TEXT)"); 
       } 

      @Override 
      public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
       Log.w("Example", "Upgrading database, this will drop tables and recreate."); 
       db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); 
       onCreate(db); 
      } 
     } 
} 

내 main.xml에 :

<?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:background="#FF9900" 
    android:padding="10dp" 
    android:orientation="vertical"> 
     <Button 
      android:id="@+id/add" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Add item..." 
      android:layout_gravity="center"/> 
     <ListView android:id="@android:id/list" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:background="#FFCC00"/> 
</LinearLayout> 

그리고 내 maindialog.xml :

<?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:id="@+id/layout_root" 
    android:orientation="vertical" 
    android:background="#FFFFFF" 
    android:minHeight="100dp" 
    android:minWidth="300dp"> 
    <EditText 
    android:id="@+id/edittext" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"/> 
<LinearLayout 
    android:id="@+id/button_layout" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="horizontal" 
    android:layout_gravity="bottom"> 
    <Button 
    android:id="@+id/ok" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Ok"/> 
    <Button 
    android:id="@+id/cancel" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Cancel"/> 
    </LinearLayout> 
</LinearLayout> 

미리 감사드립니다.

답변

4

SQLiteDatabase에 ListView 항목을로드하고 저장하려면 어떻게해야합니까?

그건 잘못된 질문입니다. IMHO. 올바른 질문은 다음과 같습니다.

SQLiteDatabase의 내용을 반영하여 ListView를 얻으려면 어떻게해야합니까?

첫 단계는 오히려 ArrayListArrayAdapter보다 CursorSimpleCursorAdapter을 사용하는 것이다. 사용자가 CursorListView를 업데이트 한 후 requery(), 항목을 추가 할 때

번째 단계는 SQLiteDatabaseinsert() 할 것이다.

Here is a sample project이 것을 보여줍니다. Here is another.

+0

좋아, 해보겠습니다. – Cg2916

+0

insert() 권한을 얻을 수 없습니다. – Cg2916

+0

커서에 대한 코드도 필요합니다. – Cg2916

관련 문제