6

How to implement android SQLite within fragments and not extending it to any other than fragments also putting those entries in the child of the expandable listview.

This is what i have implemented : http://wptrafficanalyzer.in/blog/implementing-horizontal-view-swiping-using-viewpager-and-fragmentpageradapter-in-android/

I'm implementing view pager in my mainactivity hence what ever i do i have to do within it. I dont know how to use SQLite with fragment and custom Expandablelist adapter please help me out.

Here i am basically taking the name of the user and age as user entries which i want to be displayed in the child of expandablelistview.

Issue with the date table hence can't open the entry taking activity i.e activity 2

Updated:: SQLiteAdapter:

public class SQLiteDBAdapter {

private static final String TAG = "DBAdapter"; //used for logging database version changes
// DataBase info:
public static final String DATABASE_NAME = "entry";
public static final String DATABASE_TABLE2 = "entryTable";
public static final String DATABASE_TABLE1= "dateTable";
public static final int DATABASE_VERSION = 7; // The version number must be incremented each time a change to DB structure occurs.

//Field Names(date table):
public static final String KEY_ROWID = "_id";
public static final String KEY_UDATE ="date"; //common field

// Field Names(entry table):
public static final String KEY_EROWID = "_id";
public static final String KEY_CID = "Cid"; //spinner category
public static final String KEY_TITLE = "title";
public static final String KEY_COST = "cost";
public static final String KEY_NOTE = "note";
public static final String KEY_DATE = "date";
public static final String KEY_DAY ="day";
private static final String KEY_MONTH = "month";
private static final String KEY_YEAR = "year";
public static final String KEY_TIME = "time";

public static final String[] ALL_KEYS_DATE = new String[] { KEY_UDATE,KEY_ROWID};
public static final String[] ALL_KEYS_ENTRY = new String[] {KEY_EROWID,KEY_CID, KEY_TITLE,KEY_COST,KEY_NOTE,KEY_DATE,KEY_DAY,KEY_MONTH,KEY_YEAR,KEY_TIME};



//SQL statement to create database
private static final String DATABASE_CREATE_SQL_DATE=
        "CREATE TABLE" + DATABASE_TABLE1
        +"("+ KEY_ROWID +"INTEGER PRIMARY KEY AUTOINCREMENT, "
        + KEY_UDATE +"INTEGER UNIQUE NOT NULL"
        +");";
private static final String DATABASE_CREATE_SQL_ENTRY =
        "CREATE TABLE " + DATABASE_TABLE2
        + " (" + KEY_DATE + " TEXT NOT NULL,"
        + KEY_EROWID +"INTEGER PRIMARY KEY AUTOINCREMENT, "
        + KEY_CID + " INTEGER,"
        + KEY_TITLE + " TEXT NOT NULL, "
        + KEY_COST + " INTEGER,"
        + KEY_NOTE+ " TEXT NOT NULL,"
        + KEY_DAY + "INTEGER NOT NULL, "
        + KEY_MONTH + " TEXT NOT NULL,"
        + KEY_YEAR + " INTEGER NOT NULL,"
        + KEY_TIME + " TEXT NOT NULL"
                +"FOREIGN KEY ("+KEY_DATE+")REFERENCES "+DATABASE_TABLE1+"("+KEY_UDATE+")" //FOREIGN KEY
        + ");";


private final Context context;
private DatabaseHelper myDBHelper;
private SQLiteDatabase db;


public SQLiteDBAdapter(Context ctx) {
    this.context = ctx;
    myDBHelper = new DatabaseHelper(context);
}

// Open the database connection.
public SQLiteDBAdapter open() {
    db = myDBHelper.getWritableDatabase();
    return this;
}

// Close the database connection.
public void close() {
    myDBHelper.close();
}

// Add a new set of values to be inserted into the database.
//operations for the date table
public long insertRowDate(String datestring){
    ContentValues values= new ContentValues();
    values.put(KEY_UDATE,datestring);
    CharSequence text = " Date has been inserted";
    int duration = Toast.LENGTH_SHORT;
    Toast toast = Toast.makeText(context, text, duration);
    toast.show();
    return db.insert(DATABASE_TABLE1,null,values);
}
//operations for the entry table
public long insertRowEntry(String cid, String title, String cost, String note,String date, String day, String monthDb, int year, String time) {
    ContentValues initialValues = new ContentValues();
    initialValues.put(KEY_CID, cid);
    initialValues.put(KEY_TITLE, title);
    initialValues.put(KEY_COST,cost);
    initialValues.put(KEY_NOTE,note);
    initialValues.put(KEY_DATE, date);
    initialValues.put(KEY_DAY, day);
    initialValues.put(KEY_MONTH, monthDb);
    initialValues.put(KEY_YEAR, year);
    initialValues.put(KEY_TIME,time);
    CharSequence text = " Row has been inserted";
    int duration = Toast.LENGTH_SHORT;
    Toast toast = Toast.makeText(context, text, duration);
    toast.show();
    // Insert the data into the database.
    return db.insert(DATABASE_TABLE2, null, initialValues);
}

// Delete a row from the database, by rowId (primary key)
public boolean deleteRowDate(long rowId) {
    String where = KEY_ROWID + "=" + rowId;
    return db.delete(DATABASE_TABLE1, where, null) != 0;
}
public boolean deleteRowEntry(long rowId) {
    String where = KEY_EROWID + "=" + rowId;
    return db.delete(DATABASE_TABLE2, where, null) != 0;
}
public void deleteAllDate() {
    Cursor c = getAllRowsDate();
    long rowId = c.getColumnIndexOrThrow(KEY_ROWID);
    if (c.moveToFirst()) {
        do {
            deleteRowDate(c.getLong((int) rowId));
        } while (c.moveToNext());
    }
    c.close();
}
public void deleteAllEntry() {
    Cursor c = getAllRowsEntry();
    long rowId = c.getColumnIndexOrThrow(KEY_ROWID);
    if (c.moveToFirst()) {
        do {
            deleteRowEntry(c.getLong((int) rowId));
        } while (c.moveToNext());
    }
    c.close();
}

// Return all data in the database.
public Cursor getAllRowsDate() {
    String where = null;
    Cursor c =  db.query(true, DATABASE_TABLE1, ALL_KEYS_DATE, where, null, null, null, null, null);
    if (c != null) {
        c.moveToFirst();
    }
    return c;
}
public Cursor getAllRowsEntry() {
    String where = null;
    Cursor c =  db.query(true, DATABASE_TABLE2, ALL_KEYS_ENTRY, where, null, null, null, null, null);
    if (c != null) {
        c.moveToFirst();
    }
    return c;
}

// Get a specific row (by rowId)
public Cursor getRowDate(long rowId) {
    String where = KEY_ROWID + "=" + rowId;
    Cursor c =  db.query(true, DATABASE_TABLE1, ALL_KEYS_DATE,
                    where, null, null, null, null, null);
    if (c != null) {
        c.moveToFirst();
    }
    return c;
}
public Cursor getRowEntry(long rowId) {
    String where = KEY_EROWID + "=" + rowId;
    Cursor c =  db.query(true, DATABASE_TABLE2, ALL_KEYS_ENTRY,
            where, null, null, null, null, null);
    if (c != null) {
        c.moveToFirst();
    }
    return c;
}

// Change an existing row to be equal to new data.
public boolean updateRowDate(long rowId,String date) {
    String where = KEY_ROWID + "=" + rowId;
    ContentValues newValues = new ContentValues();
    newValues.put(KEY_UDATE, date);
    // Insert it into the database.
    return db.update(DATABASE_TABLE2, newValues, where, null) != 0;
}
public boolean updateRowEntry(long rowId,String cid, String title, String cost, String note,String date,String day, String month, int year, String time) {
    String where = KEY_EROWID + "=" + rowId;
    ContentValues newValues = new ContentValues();
    newValues.put(KEY_CID, cid);
    newValues.put(KEY_TITLE, title);
    newValues.put(KEY_COST, cost);
    newValues.put(KEY_NOTE, note);
    newValues.put(KEY_DATE, date);
    newValues.put(KEY_DAY, day);
    newValues.put(KEY_MONTH, month);
    newValues.put(KEY_YEAR, year);
    newValues.put(KEY_TIME, time);
    // Insert it into the database.
    return db.update(DATABASE_TABLE1, newValues, where, null) != 0;
}
//fetching groups from the database db
public Cursor fetchgroup(){
    String query="SELECT * FROM datetable";
            return db.rawQuery(query,null);
}
//fetching children from the database db
public Cursor fetchChildren(String date) {
    String query = "SELECT * FROM entrytable WHERE date = '" + date + "'";
    return db.rawQuery(query, null);
}
private static class DatabaseHelper extends SQLiteOpenHelper
{
    DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase _db) {
        _db.execSQL(DATABASE_CREATE_SQL_ENTRY);
        _db.execSQL(DATABASE_CREATE_SQL_DATE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase _db, int oldVersion, int newVersion) {
        Log.w(TAG, "Upgrading application's database from version " + oldVersion
                + " to " + newVersion + ", which will destroy all old data!");

        // Destroy old database:
        _db.execSQL("DROP TABLE IF EXISTS " + DATABASE_CREATE_SQL_DATE);
        _db.execSQL("DROP TABLE IF EXISTS " + DATABASE_CREATE_SQL_ENTRY);

        // Recreate new database:
        onCreate(_db);
    }
}
}

UPDATED:: From the Activity2 i am the storing the data as

entryDb.insertRowDate(date);
                entryDb.insertRowEntry(a, title, cost, note,date, Daym,monthDb, year, time);

and here is my expandableListview

lv = (ExpandableListView) v.findViewById(R.id.expandable_list);
        ExpandableListAdapter expandableListAdapter = new ExpandableListAdapter(weekdays, children);
        lv.setAdapter(expandableListAdapter);


 public class ExpandableListAdapter extends BaseExpandableListAdapter {

    private  LayoutInflater inf;
    private String[] groups;
    private String[][] children;

    public ExpandableListAdapter(String[] groups, String[][] children) {
        this.groups = groups;
        this.children = children;
        inf = LayoutInflater.from(getActivity());
    }

    @Override
    public int getGroupCount() {
        return groups.length;
    }

    @Override
    public int getChildrenCount(int groupPosition) {

        return children[groupPosition].length;
    }

    @Override
    public Object getGroup(int groupPosition) {
        return groups[groupPosition];
    }

    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return children[groupPosition][childPosition];
    }

    @Override
    public long getGroupId(int groupPosition) {
        return groupPosition;
    }

    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return childPosition;
    }

    @Override
    public boolean hasStableIds() {
        return true;
    }

    @Override
    public View getChildView(int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
        ViewHolder holder;

        if (convertView == null) {
            convertView = inf.inflate(R.layout.list_item, parent, false);
            holder = new ViewHolder();

            holder.text = (TextView) convertView.findViewById(R.id.lblListItem);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
holder.text.setText(""+ myDataFromActivity);
        return convertView;
    }

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        ViewHolder holder;
        TextView textView;
        if (convertView == null) {
            convertView = inf.inflate(R.layout.list_group, parent, false);

            holder = new ViewHolder();
            holder.text = (TextView) convertView.findViewById(R.id.lblListHeader);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }


      //  holder.text.setText(getGroup(groupPosition).toString());//testing
        //Sets the group position hence the Date
        textView=(TextView)convertView.findViewById(R.id.date);
        textView.setTextSize(30);
        if((groupPosition+1)<10)
        textView.setText("0"+(groupPosition+1));
        else
        textView.setText(""+(groupPosition+1));
        //TODO
        /*
        * Think of a subtext to make the layout much more interactive
        * */
        return convertView;
    }

    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return true;
    }

    private class ViewHolder {
        TextView text;
    }
}
silverFoxA
  • 4,549
  • 7
  • 33
  • 73
  • you can also use limit and offset in sqlite for paging purposes. page length = 10, then select * from Table offset 0 limit 10, page 2 would be offset 10 limit 10. For scrolling and loading simultaniously, use some mindset like Datatables.net here http://datatables.net/release-datatables/extensions/Scroller/examples/server-side_processing.html – Pierre Apr 05 '15 at 13:16
  • Sorry but this didn't help and the link that you sent is completely different its related to this question actually – silverFoxA Apr 05 '15 at 16:06
  • Make a custom class 'Person' which should store values like name as parent and an arraylist which will save child values. In adapter fetch parent value and for all child loop through child values arraylist from the object. You will pass list of object from the database. – Harin Apr 14 '15 at 09:03
  • I need code as m completely new to sqlite – silverFoxA Apr 14 '15 at 09:15
  • Well in this case, you need to change `ExpandableListAdapter` which populates your items from String[] Array. If you want to list from SQLite Database, you have to send `Cursor` instead of Array to your ListAdapter which means you have to make new Adapter. You can `SimpleCursorTreeAdapter` from here http://stackoverflow.com/a/6945188/3736955 and here: http://stackoverflow.com/a/10646609/3736955 – Jemshit Apr 16 '15 at 06:28
  • please check the above code i have updated it – silverFoxA Apr 17 '15 at 14:23

0 Answers0