5

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?

2 Answers 2

4

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.

Sign up to request clarification or add additional context in comments.

2 Comments

android.database.Cursor does not have getType() that was my idea using a swich or if but it does not have GetType(columnindex)
Available on apilevel >= 11... seems like there is no suitable method for older Androids, see stackoverflow.com/questions/11658239/…
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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.