malik.epperson 0 Newbie Poster

I am creating a couponing app where coupons are stored in a database and compared to local ads to let users know when to use the coupons. I have created a database that holds all of the coupons and also one for the user's personal library. I am having difficulty in getting the library to show in a gridview. the code for the gridview adapter, the database helper, and the activity code are all below as well as the error that I am recieving. please help

LibraryListener.java

public class LibraryListener extends Activity{

    GridView grid;
    private static final String TABLE_NAME = "Library";

    //set table column names as constants
    private static final String LIBRARY_ID = "_id";
    private static final String UPC = "UPC";
    private static final String DESCRIPTION = "Description";
    private static final String DISCOUNT = "Discount";
    private static final String MIN_REQ = "MinReq";
    private static final String DOUBLE = "Double";
    private static final String IMAGE = "Image";
    private static final String EXPIRATION = "Expiration";
    private static final String QTY = "Qty";

    private static final String[] TABLE_COLUMNS = new String[]{UPC,DESCRIPTION,DISCOUNT,MIN_REQ,DOUBLE,IMAGE,EXPIRATION,QTY};

    private SQLiteDatabase database;
    private ArrayList<String> libraryUPC;
    private ArrayList<String> libraryImages;
    private ArrayList<String> libraryDescription;
    private ArrayList<Double> libraryDiscount;
    private ArrayList<Integer> libraryMinReq;
    private ArrayList<String> libraryDouble;
    private ArrayList<String> expirationDate;
    private ArrayList<Integer> libraryQty;
    private ArrayList<String> imageFilePath;
    DatabaseHelper dbOpenHelper = new DatabaseHelper(this);

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

        GridView gridView = (GridView)findViewById(R.id.gridview);

        try {
            dbOpenHelper.createDataBase();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        dbOpenHelper.openDatabase();
        fillLibrary();
        dbOpenHelper.close();
        gridView.setAdapter(new GridViewAdapter(this, libraryDescription,imageFilePath));
        //setUpList();

    }

    // Fill the library with items from database
    private void fillLibrary() {
        libraryImages = new ArrayList<String>();
        Cursor cursor = database.query(TABLE_NAME, TABLE_COLUMNS, null, null, null, null, LIBRARY_ID);
        cursor.moveToFirst();
            if(!cursor.isAfterLast()) {
                do {
                    //UPC,DESCRIPTION,DISCOUNT,MIN_REQ,DOUBLE,IMAGE,EXPIRATION,QTY
                    String upc = cursor.getString(0);
                    libraryUPC.add(upc);
                    String description = cursor.getString(1);
                    libraryDescription.add(description);
                    double discount = cursor.getDouble(2);
                    libraryDiscount.add(discount);
                    int min = cursor.getInt(3);
                    libraryMinReq.add(min);
                    String dbl = cursor.getString(4);
                    libraryDouble.add(dbl);
                    String image = cursor.getString(5);
                    libraryImages.add(image);
                    String expiration = cursor.getString(6);
                    expirationDate.add(expiration);
                    int qty = cursor.getInt(7);
                    libraryQty.add(qty);
                } while (cursor.moveToNext());
            }
            cursor.close();
        }
    }

DatabaseHelper.java

public class DatabaseHelper extends SQLiteOpenHelper{
    private static String DB_PATH = "/data/data/com.example.extremesavings/databases/";
    private static final String DATABASE_NAME="ExtremeSavings";
    private static final int DATABASE_VERSION=1;
    private final Context myContext;
    private SQLiteDatabase db;
    String description;
    double discount;
    String minimum;
    String dbl;
    String imagefilePath;

    public DatabaseHelper(Context c){
        super(c, DATABASE_NAME, null, 1);
        this.myContext = c;
    }

    private void showInfoDialog(Context context, String title, String information) {
        new AlertDialog.Builder (context)
        .setMessage(information)
        .setTitle(title)
        .setPositiveButton("OK", new DialogInterface.OnClickListener() {


            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();

            }
        }).show();  
    }

    public void createDataBase() throws IOException{

        boolean dbExist = checkDataBase();

        if(dbExist){
            showInfoDialog(myContext, "Alert", "Database already exists");
        }else{

            //create empty database into the default system path
            this.getWritableDatabase();

            try {
                //overwrite empty database with internal database
                copyDataBase();

            } catch (IOException e) {

                throw new Error("Error copying database");

            }
        }

    }

    /*
     * Check if the database already exist to avoid re-copying the file 
     * each time you open the application.
     */
    public boolean checkDataBase(){

        SQLiteDatabase checkDB = null;

        try{
            String myPath = DB_PATH + DATABASE_NAME;
            checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);

        }catch(SQLiteException e){

            //database does't exist yet.

        }

        if(checkDB != null){

            checkDB.close();

        }

        return checkDB != null ? true : false;
    }

    /**
     * Copies your database from your local assets-folder to the just created empty database in the
     * system folder, from where it can be accessed and handled.
     * This is done by transfering bytestream.
     * */
    private void copyDataBase() throws IOException{

        //Open your local db as the input stream
        InputStream myInput = myContext.getAssets().open(DATABASE_NAME);

        // Path to the just created empty db
        String outFileName = DB_PATH + DATABASE_NAME;

        //Open the empty db as the output stream
        OutputStream myOutput = new FileOutputStream(outFileName);

        //transfer bytes from the inputfile to the outputfile
        byte[] buffer = new byte[1024];
        int length;
        while ((length = myInput.read(buffer))>0){
            myOutput.write(buffer, 0, length);
        }

        //Close the streams
        myOutput.flush();
        myOutput.close();
        myInput.close();

    }

    public void openDatabase(){

        //Open the database
        String myPath = DB_PATH + DATABASE_NAME;
        db = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);

    }

    @Override
    public synchronized void close() {

            if(db != null)
                db.close();

            super.close();

    }

    //search table for UPC code
    public boolean findUpc(String tableName, String upc)
    {
        String Query = "Select * from " + tableName + " where UPC = " + upc;
        Cursor cursor = db.rawQuery(Query, null);
            if(cursor.getCount() <= 0){
                cursor.close();
                return false;
            }
        cursor.close();
        //test to see if coupon is found in database
        Toast toast = Toast.makeText(myContext, "Coupon found in Database", Toast.LENGTH_LONG);
        toast.show();
        return true;
    }

    //Add coupon from database to library
    public void addToLibrary(String upc, String expirationDate, int qty)
    {
        openDatabase();
        //search library to see if coupon already exists in table
        boolean inLibrary = findUpc("Library",upc);

        if (!inLibrary){
            String selectQuery = "Select * from CouponDatabase where UPC = " + upc;
            Cursor cursor = db.rawQuery(selectQuery, null);
            cursor.moveToFirst();
            if(!cursor.isAfterLast()) {
                do {
                    //DESCRIPTION,DISCOUNT,MIN_REQ,DOUBLE,IMAGE,QTY
                    description = cursor.getString(2);
                    discount = cursor.getDouble(3);
                    minimum = cursor.getString(4);
                    dbl = cursor.getString(5);
                    imagefilePath = "R.drawable." + cursor.getString(6);
                } while (cursor.moveToNext());
            }
            cursor.close();
            //create string to insert data into library table
            String insertQuery = "INSERT into Library (UPC, Description, Discount, MinReq, Double, Image, Expiration, Qty)" 
            + "(" + upc + ", " + description + ", " + discount + ", " + minimum + ", " + dbl + ", " + imagefilePath + ", " + expirationDate + ", " + qty + ")";
            //insert data into Library table
            db.execSQL(insertQuery);
            Toast toast = Toast.makeText(myContext, "Item added to Library", Toast.LENGTH_LONG);
            toast.show();
        }

    }


    @Override
    public void onCreate(SQLiteDatabase arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
        // TODO Auto-generated method stub

    }

    }

GridViewAdapter.java

public class GridViewAdapter extends BaseAdapter{
    ArrayList <String> result;
    Context context;
    ArrayList <String> imageId;

    private static LayoutInflater inflater=null;
    public GridViewAdapter(LibraryListener libraryListener, ArrayList<String> description, ArrayList<String> image) {
        // TODO Auto-generated constructor stub
        result=description;
        context=libraryListener;
        imageId=image;
         inflater = ( LayoutInflater )context.
                 getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return result.size();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        View vi = convertView;

        TextView text = (TextView) vi.findViewById(R.id.text);
        ImageView image = (ImageView) vi.findViewById(R.id.image);

        //text.setText(result.);
        return vi;
    }
    }