Android Cursor? how to read object data?

i know a Cursor has method for get String, Int, etc but isn't there somethings as

mycursor.GetObject(index)

I want to create a dynamic method which returns an object and I only cast it.

or is it possible use mycursor.GetString(index) for any type? String,Float,Double,Long,Short, Blob,Int,etc

and I can use for example for a Float or a Int or any type and cast it?

for example

(Blob) newblob=mycursor.GetString(i_return_BloB);
(Int) newint=mycursor.GetString(i_return_Int);
(Float) newfloat=mycursor.GetString(i_return_Float);
(Double) newdouble=mycursor.GetString(i_return_Double);
(Long) newlong=mycursor.GetString(i_return_long);
(Short) newshort=mycursor.GetString(i_return_short);

would it work? could i use mycursor.GetString() for any type?


Solution 1:

You can get the type of a column, and then call the appropiate method from a switch statement (and build the method you're asking for by yourself).

Using getString for different types is not safe, as the docs specify:

The result and whether this method throws an exception when the column value is null or the column type is not a string type is implementation-defined.

Solution 2:

You want to try something like:

DataBaseHelper myDbHelper = new DataBaseHelper(this);

ArrayList<String> mArrayList = new ArrayList<String>();

String[] array;

Cursor c = myDbHelper.query(query);

int id = c.getColumnIndex("COLUMN_NAME");

for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
    mArrayList.add(c.getString(id));
}

array = mArrayList.toArray(new String[0]);


System.out.println(array[0]);

c.close();

myDbHelper.close();

And your query() should look something like:

public Cursor query(String query){

    String selectAll = null;

    if(query.length() > 1){

    selectAll = "SELECT TABLENAME.COLUMNAME FROM TABLENAME WHERE TABLENAME.COLUMNNAME LIKE" + query + ";";

    return myDataBase.rawQuery(selectAll, null);
}

You need to change the SQL code to suit your needs. In this case I'm retrieving every value of a column that match the query, but you could modify the SELECT statement. Hope it helps.