I want to fetch the data from the database and show the, in a listview,I've created an Arraylist and by means of this connected the listview to the database, but I'm only able to show the details of one column in each row, but what I'm looking for is a way to show the Details of all columns of my table in each row of the database.
I want to show the description of my rows which are inserted in other columns in smaller fonts below the main content of each row in my listview. I've tried to use a code snippet which had used a SimpleCursorAdapter but I couldn't implement this here!I've also found out that I can use hashmap but the samples I've already found were all about using arrays of strings to populate the listview.
Here is my layout.xml:
<?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>
Here is my SQLHelper
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) {}
}
And here is my activity:
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 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() {
//---------------------------------layout------------------------------------
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_single_choice, goods));
listView = getListView();
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
mAdapter=new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_single_choice, goods);
//---------------------------------------------------------------------------
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<String>();
Cursor goodCursor = database.query(TABLE_NAME,
new String[]
{GOOD_UNITPRICE,GOOD_NAME,GOOD_ID, CART_ID,GOOD_UNITPRICE ,QUANTITY},
null, null, null, null
, GOOD_NAME);
goodCursor.moveToFirst();
if(!goodCursor.isAfterLast()) {
do {
String name = goodCursor.getString(1);
goods.add(name);
} while (goodCursor.moveToNext());
}
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);
}
}