2013-08-08 50 views
5

tôi biết một Cursor có phương pháp để có được String, Int, vv nhưng không có somethings nhưCon trỏ Android? làm thế nào để đọc dữ liệu đối tượng?

mycursor.GetObject(index) 

Tôi muốn tạo ra một phương pháp năng động mà trả về một đối tượng và tôi chỉ cast nó.

hoặc có thể sử dụng mycursor.GetString(index) cho bất kỳ loại nào không? String,Float,Double,Long,Short, Blob,Int, v.v.

và tôi có thể sử dụng ví dụ cho Float hoặc Int hoặc bất kỳ loại nào và truyền không?

ví dụ

(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); 

nó sẽ làm việc? tôi có thể sử dụng mycursor.GetString() cho bất kỳ loại nào không?

Trả lời

4

Bạn có thể get the type of a column và sau đó gọi phương thức appropiate từ câu lệnh switch (và tự xây dựng phương thức mà bạn đang yêu cầu).

Sử dụng getString với nhiều loại khác nhau là không an toàn, như các tài liệu ghi rõ:

Kết quả và liệu phương pháp này ném một ngoại lệ khi giá trị cột là null hoặc kiểu cột không phải là một loại chuỗi là thực hiện -định nghĩa.

+0

android.database.Cursor không có getType() đó là ý tưởng của tôi bằng cách sử dụng một swich hoặc nếu nó không có GetType (columnindex) – angel

+0

Có sẵn trên apilevel> = 11 ... có vẻ như không có phương pháp phù hợp cho các Android cũ hơn, hãy xem http://stackoverflow.com/questions/11658239/cursor-gettype-for-api-level-11 – dst

+0

Cách giải quyết: http://stackoverflow.com/a/6145969/2636001 – dst

2

Bạn muốn thử một cái gì đó như:

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(); 

Và bạn query() nên giống như thế:

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); 
} 

Bạn cần phải thay đổi mã SQL để phù hợp với nhu cầu của bạn. Trong trường hợp này, tôi truy lục mọi giá trị của một cột phù hợp với truy vấn, nhưng bạn có thể sửa đổi câu lệnh SELECT. Hy vọng nó giúp.