0

我想将我的表的所有列放在数据库中的列表视图中,我想使用 Hashmap 来制作列,但我不知道在哪里放置一个循环来制作地图的新对象并放入一个列表视图,当我运行我的应用程序时,只出现第一列,似乎还没有创建其他地图!你能帮我吗?提前致谢!

这是我的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#86868a"
    >
 <ListView 
    android:id="@android:id/list"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    style="@style/CodeFont"
     >
    </ListView>
 <RelativeLayout android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     >  
 <Button 
     android:id="@+id/DeleteSelectedGoodsButton"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:text="@string/DeleteSelectedGoods"
     android:layout_alignParentTop="true"
     android:layout_alignParentLeft="true"/>
 <Button 
     android:id="@+id/ConfirmDelete"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:text="@string/ConfirmDeleteButton"
     android:layout_alignParentTop="true"
     android:layout_centerHorizontal="true"
     />
 <Button 
     android:id="@+id/CancelButton"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:text="@string/CancelButton"
     android:layout_alignParentTop="true"
     android:layout_alignParentRight="true"
     />
 </RelativeLayout>
</LinearLayout>

网格.xml

<?xml version="1.0" encoding="utf-8" ?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content"
    android:layout_width="fill_parent"
    android:paddingTop="4dip"
    android:paddingBottom="6dip"
    android:orientation="horizontal"
    >
    <TextView 
        android:id="@+id/GOOD_ID_CELL"
        android:layout_width="50dip"
        android:layout_height="wrap_content"
        android:layout_weight="1"

        />
    <TextView 
        android:id="@+id/CART_ID_CELL"
        android:layout_width="70dip"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        />
    <TextView 
        android:id="@+id/GOOD_NAME_CELL"
        android:layout_width="60dip"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        />
     <TextView 
        android:id="@+id/GOOD_UNITPRICE_CELL"
        android:layout_width="60dip"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        />
      <TextView 
        android:id="@+id/QUANTITY_CELL"
        android:layout_width="60dip"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        />


    </LinearLayout>

SQL 助手:

package com.example.nfc;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

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

public class ExternalDbOpenHelper extends SQLiteOpenHelper {

    //-----------------------------------------------------
    public static String DB_PATH;
    //-----------------------------------------------------
    public static String DB_NAME;
    public SQLiteDatabase database;
    public final Context context;
    /////Adapted From spinner
     /** A constant, stores the the table name */

    private static final String TABLE_NAME = "Tbl_Goods";
    private static final String GOOD_ID = "Good_ID";
    private static final String CART_ID = "Cart_ID";
    private static final String GOOD_NAME = "Good_Name";
    private static final String GOOD_UNITPRICE = "Good_UnitPrice";
    private static final String QUANTITY = "Quantity";
    ////---------------------------

    public SQLiteDatabase getDb() {
        return database;

    }

    public ExternalDbOpenHelper(Context context, String databaseName) {
        super(context, databaseName, null, 1);
        this.context = context;
        //-------------------------------------------------
        String packageName = context.getPackageName();
        DB_PATH = String.format("//data//data//%s//databases//", packageName);
        DB_NAME = databaseName;
        openDataBase();
    }

    //--------------------------------------------------------------------------------
    public void createDataBase() {
        boolean dbExist = checkDataBase();
        if (!dbExist) {
            this.getReadableDatabase();
            try {
                copyDataBase();
            } catch (IOException e) {
                Log.e(this.getClass().toString(), "Copying error");
                throw new Error("Error copying database!");
            }
        } else {
            Log.i(this.getClass().toString(), "Database already exists");
        }
    }
    //--------------------------------------------------------------
    private boolean checkDataBase() {
        SQLiteDatabase checkDb = null;
        try {
            String path = DB_PATH + DB_NAME;
            checkDb = SQLiteDatabase.openDatabase(path, null,
                    SQLiteDatabase.OPEN_READONLY);
        } catch (SQLException e) {
            Log.e(this.getClass().toString(), "Error while checking db");
        }
        //---------------------------------------------------
        if (checkDb != null) {
            checkDb.close();
        }
        return checkDb != null;
    }
    //-----------------------------------------------------
    private void copyDataBase() throws IOException {
        // ----------------------------------------------
        //------------------- assets----------------------
        InputStream externalDbStream = context.getAssets().open(DB_NAME);

        // ----------------------------------------------------------
        String outFileName = DB_PATH + DB_NAME;

        // -------------------------------------------------
        OutputStream localDbStream = new FileOutputStream(outFileName);

        //------------------------------------
        byte[] buffer = new byte[1024];
        int bytesRead;
        while ((bytesRead = externalDbStream.read(buffer)) > 0) {
            localDbStream.write(buffer, 0, bytesRead);
        }
        // -----------------------------
        localDbStream.close();
        externalDbStream.close();

    }

    public SQLiteDatabase openDataBase() throws SQLException {
        String path = DB_PATH + DB_NAME;
        if (database == null) {
            createDataBase();
            database = SQLiteDatabase.openDatabase(path, null,
                SQLiteDatabase.OPEN_READWRITE);
        }
        return database;
    }
    @Override
    public synchronized void close() {
        if (database != null) {
            database.close();
        }
        super.close();
    }

    ////-----------------------Adapted From SQLSpinner
    /** Inserts a new contact to the table contacts */
    public long insert(ContentValues contentValues){
        long rowID = database.insert(TABLE_NAME, null, contentValues);
        return rowID;

    }

    /** Updates a contact */
    public int update(ContentValues contentValues,String contactID){
        int cnt = database.update(TABLE_NAME, contentValues, "_id=" + contactID, null);
        return cnt;
    }

    /** Deletes a contact from the table */
    public int del(String contactID){
        int cnt = database.delete(TABLE_NAME, "_id="+contactID, null);      
        return cnt;
    }

    /** Returns all the contacts in the table */
    public Cursor getAllContacts(){
        return database.query(TABLE_NAME, new String[] { GOOD_ID,  CART_ID , GOOD_NAME,GOOD_UNITPRICE,QUANTITY } , null, null, null, null, GOOD_NAME + " asc ");
    }

    /** Returns a contact by passing its id */
    public Cursor getContactByID(String contactID){
        return database.query(TABLE_NAME, new String[] {  GOOD_ID,  CART_ID , GOOD_NAME,GOOD_UNITPRICE,QUANTITY} , "_ID="+contactID, null, null, null, GOOD_NAME + " asc ");
    }

    ////-----------------------------------
    @Override
    public void onCreate(SQLiteDatabase db) {}
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}
}

主.java:

package com.example.nfc;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v4.widget.SimpleCursorAdapter;
import android.view.KeyEvent;
import android.view.View;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;

public class PrepopSqliteDbActivity extends ListActivity {
    private static final String DB_NAME = "NFC.sqlite";
    //------------------------------------------------------------
    private static final String TABLE_NAME = "Tbl_Goods";
    private static final String GOOD_ID = "Good_ID";
    private static final String CART_ID = "Cart_ID";
    private static final String GOOD_NAME = "Good_Name";
    private static final String GOOD_UNITPRICE = "Good_UnitPrice";
    private static final String QUANTITY = "Quantity";

    private SQLiteDatabase database;
    private ListView listView;
    //private ArrayList<String> goods;

    ///Adapted from MultiLevel

    ArrayList<HashMap<String, String>> goods=new ArrayList<HashMap<String,String>>();
    HashMap<String, String> map;


    //////-----------------Adapted From SQLSpinner
    ArrayAdapter mAdapter;


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

        //-------------------------------------------------------
        ExternalDbOpenHelper dbOpenHelper = new ExternalDbOpenHelper(this, DB_NAME);
        database = dbOpenHelper.openDataBase();
        //--------------------------------------

        fillgoods();

        setUpList();  
  //////Cancel Button

        Button btnCancel=(Button)findViewById(R.id.CancelButton);
        btnCancel.setOnClickListener(new OnClickListener() {

            public void onClick(View arg0) {

                finish();
            }
        });


    }

    private void setUpList() {
        ///////////////////////////////////Multi
        //SimpleAdapter mSchedule=new SimpleAdapter(this, goods, R.layout.grids,
                //new String[]{"train","from","to"},
                //new int[]{R.id.TRAIN_CELL,R.id.FROM_CELL,R.id.TO_CELL});

        setListAdapter(new SimpleAdapter(this, goods, R.layout.grids,
                new String[]{GOOD_ID,CART_ID,GOOD_NAME,GOOD_UNITPRICE,QUANTITY},
                new int[]{R.id.GOOD_ID_CELL,R.id.CART_ID_CELL,R.id.GOOD_NAME_CELL,R.id.GOOD_UNITPRICE_CELL,
                R.id.QUANTITY_CELL}));

        //---------------------------------layout------------------------------------


        //setListAdapter(new ArrayAdapter<HashMap<String, String>>(this,
                    //  android.R.layout.simple_list_item_single_choice, goods));

        listView = getListView();
        listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);



        //---------------------------------------------------------------------------
        listView.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                                int position,long id) {
                Toast.makeText(getApplicationContext(),
                            ((TextView) view).getText().toString(),
                             Toast.LENGTH_SHORT).show();                
            }

        });


    }

    //--------------------------------------------------------------------
    private void fillgoods() {
        goods = new ArrayList<HashMap<String, String>>();
        Cursor goodCursor = database.query(TABLE_NAME,
                                             new String[] 
                                             {GOOD_ID,CART_ID,GOOD_NAME,GOOD_UNITPRICE,QUANTITY},
                                             null, null, null, null
                                             , GOOD_NAME);


        String[] g=new String[] 
                 {GOOD_ID,CART_ID,GOOD_NAME,GOOD_UNITPRICE,QUANTITY};
        goodCursor.moveToFirst();
        if(!goodCursor.isAfterLast()) {
            do {
                int i=0;
                String name1 = goodCursor.getString(i+1);
                 map=new HashMap<String, String>();
                 map.put(g[i],name1);
                 goods.add(map);
                i=i+1;
            } while (goodCursor.moveToNext());
        }
        //goods.add(map);
        goodCursor.close();
    }


    //////////////Home And Back Button
    @Override
    public void onAttachedToWindow() {
       this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
      super.onAttachedToWindow();


    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
       if(keyCode == KeyEvent.KEYCODE_HOME)

           BackToMainIntent();

     else if(keyCode==KeyEvent.KEYCODE_BACK)
       {
         BackToMainIntent();
      }
       return false;
    }



    public void BackToMainIntent()
    {
        Intent intent = new Intent(this, Main.class);
           intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
           startActivity(intent);
      }
    }
4

1 回答 1

0

如果您只是在循环中遇到问题,那么将您的旧代码更改为这个。

在 do-while 循环之前声明“i”以获取所有行。您已经在 do-while 循环中声明了它,这就是它只返回第一行的原因。

 if(!goodCursor.isAfterLast()) {
       int i=0; //declare "i" here.
                do {
                    //int i=0;
                    String name1 = goodCursor.getString(i+1);
                     map=new HashMap<String, String>();
                     map.put(g[i],name1);
                     goods.add(map);
                    i=i+1;
                } while (goodCursor.moveToNext());
            }

希望这会给你一些关于如何循环记录的提示。

于 2013-01-13T10:54:38.307 回答