0

これまでに持っているコードをリストすることから始めます...

これは私のメインのアクティビティ クラスです。

public class SQLiteDatabaseMain extends Activity
{
    ListView list;
    DatabaseHelper helper;
    SQLiteDatabase db;
    DatabaseAdapter adapter;


    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        init();
    }

    public void init()
    {
        helper = new DatabaseHelper(this);

        list = (ListView) findViewById(R.id.listView1);

        db = helper.getWritableDatabase();

        helper.populateGrocery(db);

    }

}

これは私の DatabaseHelper クラスです:

public class DatabaseHelper extends SQLiteOpenHelper
{

private static final String DATABASE_NAME = "grocerystoretest.db";
private static final String DATABASE_TABLE = "grocerystoreitems";
private static final String GROCERY_KEY_NAME = "name";
private static final String GROCERY_KEY_TYPE = "type";
private static final int SCHEMA_VERSION = 1;

SQLiteDatabaseMain sqlMain = new SQLiteDatabaseMain();

public DatabaseHelper(Context context)
{
    super(context, DATABASE_NAME, null, SCHEMA_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db)
{
    db.execSQL("CREATE TABLE "
            + DATABASE_TABLE
            + " (_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, type TEXT);");
}

@Override
public void onUpgrade(SQLiteDatabase db, int arg1, int arg2)
{
    // db.execSQL("DROP TABLE IF EXISTS " + DATABASE_NAME);

}

public void insert(String name, String type)
{
    ContentValues cv = new ContentValues();
    cv.put("name", name);
    cv.put("type", type);

    getWritableDatabase().insert(DATABASE_TABLE, "name", cv);
}

public void update(String id, String name, String type)
{
    ContentValues cv = new ContentValues();
    String[] args =
    { id };

    cv.put("name", name);
    cv.put("type", type);

    getWritableDatabase().update(DATABASE_TABLE, cv, "_ID=?", args);
}

public void delete(String id, String name, String type)
{
    ContentValues cv = new ContentValues();
    String[] args =
    { id };

    cv.put("name", name);
    cv.put("type", type);

    getWritableDatabase().delete(DATABASE_TABLE, "_ID=?", args);
}

public void populateGrocery(SQLiteDatabase db)
{
    ArrayList<GroceryObj> groceryArrayList;
    groceryArrayList = buildGroceryArrayList();
    String insertStmt = null;
    for (int i = 0; i < groceryArrayList.size(); i++)
    {
        insertStmt = "INSERT INTO " + DATABASE_TABLE + " ("
                + GROCERY_KEY_NAME + ", " + GROCERY_KEY_TYPE + ") "
                + "VALUES (\"" + groceryArrayList.get(i).getName()
                + "\", \"" + groceryArrayList.get(i).getType() + "\");";
        db.execSQL(insertStmt);
    }
}

private ArrayList<GroceryObj> buildGroceryArrayList()
{
    ArrayList<GroceryObj> aL = new ArrayList<GroceryObj>();
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    try
    {
        Context context;
        context = sqlMain.getApplicationContext();

        DocumentBuilder builder = factory.newDocumentBuilder();
        InputStream raw = context.getAssets().open("default_grocerystore.xml");
        Document dom = builder.parse(raw);
        Element root = (Element) dom.getDocumentElement();
        NodeList groceryItems = ((Document) root)
                .getElementsByTagName("grocery");
        for (int i = 0; i < groceryItems.getLength(); i++)
        {
            String name = null;
            String type = null;
            Node item = groceryItems.item(i);
            NodeList groceryItem = item.getChildNodes();
            for (int j = 0; j < groceryItem.getLength(); j++)
            {
                Node nodeItem = groceryItem.item(j);
                String nodeName = nodeItem.getNodeName();
                if (nodeName.equalsIgnoreCase("name"))
                {
                    name = nodeItem.getFirstChild().getNodeValue();
                } else if (nodeName.equalsIgnoreCase("type"))
                {
                    type = nodeItem.getFirstChild().getNodeValue();
                }
            }
            aL.add(new GroceryObj(name, type));
        }
    } catch (Exception e)
    {
        e.printStackTrace();
    }
    return aL;
}

public String getName(Cursor c)
{
    return (c.getString(1));
}

public String getType(Cursor c)
{
    return (c.getString(3));
}

}

これは私の GroceryObj クラスです:

public class GroceryObj
{

private String name = "";
private String type = "";

public GroceryObj(String name, String type)
{
    this.name = name;
    this.type = type;
}

public String getName()
{
    return (name);
}

public void setName(String name)
{
    this.name = name;
}

public String getType()
{
    return (type);
}

public void setType(String type)
{
    this.type = type;
}

}

私の DatabaseAdapter クラスは現在空白です。これは私が理解する必要があるものです!:

public class DatabaseAdapter extends CursorAdapter
{

public DatabaseAdapter(Context context, Cursor c)
{
    super(context, c);
}

@Override
public void bindView(View view, Context context, Cursor cursor)
{

}

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent)
{
    return null;
}

}

次に、すべての食料品を名前と種類別に格納する xml ファイルを作成します。

<?xml version="1.0" encoding="utf-8"?>
<default_grocerystore>
    <grocery>
            <name>Bread</name>
            <type>Bakery</type>
    </grocery>
    <grocery>
            <name>Rolls</name>
            <type>Bakery</type>
    </grocery>
    <grocery>
            <name>Juice</name>
            <type>Beverages</type>
    </grocery>
    <grocery>
            <name>Soda</name>
            <type>Beverages</type>
    </grocery>
</default_grocerystore>

最後に、ListView の各行の各項目の名前と種類を表示する 2 つの textView である row.xml があります。

私の main.xml は単なる TextView とリストビューです。

私が本当にこだわっているのはアダプターです。editTextsとホルダーオブジェクトを介してデータベースに行を挿入するために以前にデータベースアダプターを使用しましたが、静的データベースを取得して、リストビューを介して各行に変換してビューに変換したことはありませんでした。listView を介してデータベースを表示するために必要なものについて、だれか何か指針がありますか?? 私はここで完全に困惑しているので、どんな助けも大歓迎です。これを行う方法を見つけようとして、過去数時間頭を悩ませてきました。助けてくれてありがとう!

4

2 に答える 2

0

CursorAdapter を使用する必要はありません。単純な ArrayAdapter で十分です。データベース クエリの結果を ArrayList (既に行っている) に格納し、そのリストをアダプターのコンストラクターに渡すだけです。配列アダプターは、タイプ GroceryObj の配列リストを受け入れることができる必要があります。その後、GroceryObj.getName() または getType() を呼び出して ListView を埋めることができます。

于 2012-10-13T21:23:10.623 に答える
0

SimpleAdapterは静的データ用であるため、動的データを使用する場合はパフォーマンスが異なる場合があります。などの動的データを使用する場合は、おそらく別のタイプのアダプターを使用する方法もありますArrayAdapter

于 2012-10-13T21:15:21.487 に答える