2011-03-30 18 views
6

लोड मान मैं एंड्रॉइड के लिए नया हूं। मेरे पास SQLite डीबी के साथ काम करने वाला एक एप्लीकेशन है। मुझे डेटाबेस से मानों को ऑब्जेक्ट की सरणी सूची में धक्का देना होगा। मेरे द्वारा उपयोग किया गया कोड यहां दिया गया है।एंड्रॉइड - एसक्लाइट डेटाबेस से सरणी सूची में

private ArrayList<objectname> objectList = new ArrayList<objectname>(); 
//function used to get values from database 
    public ArrayList<objectname> getResults() { 

    MyDb db = new MyDb(this); //my database helper file 
    db.open(); 
    Cursor c = db.getAllValues(); //function to retrieve all values from a table- written in MyDb.java file 
    if (c.moveToFirst()) 
    { 
     do {   
      String date = c.getString(c.getColumnIndex("date")); 

      try 
      { 
       ob = new objectname(); 
       ob.setDate(c.getString(c.getColumnIndex("date")));// setDate function is written in Class file 
       objectList.add(ob); 
      } 
      catch (Exception e) { 
      Log.e(MY_DEBUG_TAG, "Error " + e.toString()); 
      } 

     } while (c.moveToNext()); 
    } 
     db.close(); 
     return objectList; 
} 

यह सही ढंग से काम नहीं कर रहा है। नहीं किसी भी त्रुटि से पता चला, लेकिन मैं ArrayList objectList

पहले से me..Thanks मदद कृपया करने के लिए मूल्यों को नहीं मिला ..

+0

क्या पैरामीटर करता है "यह" आपके डीबी प्रबंधक उदाहरण बनाते समय संतुष्ट है? कन्स्ट्रक्टर कैसा दिखता है? – AlleyOOP

उत्तर

7

इस प्रयास करें:

private ArrayList<objectname> objectList = getResults(); 

private ArrayList<objectname> getResults() { 

    MyDb db = new MyDb(this); //my database helper file 
    db.open(); 

    ArrayList<objectname> resultList = new ArrayList<objectname>(); 


    Cursor c = db.getAllValues(); //function to retrieve all values from a table- written in MyDb.java file 
    while (c.moveToNext()) 
    { 
     String date = c.getString(c.getColumnIndex("date")); 

     try 
     { 
      ob = new objectname(); 
      ob.setDate(date);// setDate function is written in Class file 
      resultList.add(ob); 
     } 
     catch (Exception e) { 
      Log.e(MY_DEBUG_TAG, "Error " + e.toString()); 
     } 

    } 

    c.close(); 

    db.close(); 
    return resultList; 
} 
+0

धन्यवाद धावक 4 9। मैंने कोशिश की लेकिन मेरे लिए काम नहीं कर रहा –

+0

बिल्कुल काम नहीं कर रहा है? कोई रिकॉर्ड पॉप्युलेट नहीं हो रहा है? – runor49

+0

यह काम करता है, जब मैंने अपने कोड से db.close() हटा दिया और c.close() को घुमाया। लेकिन मुझे लगता है कि db.open() और db.close() आवश्यक है। लेकिन अब समस्या यह है कि, कुछ त्रुटियों और चेतावनी बयान लॉगकैट में दिखाए जाते हैं .. WARN/SQLiteCompiledSql (10839): अंतिमकर्ता में बयान जारी करना। कृपया सुनिश्चित करें कि आप अपने कर्सर पर स्पष्ट रूप से बंद() को कॉल करते हैं: WARN/SQLiteCompiledSql (10839): android.database.sqlite.DatabaseObjectNotClosedException: एप्लिकेशन कर्सर या डेटाबेस ऑब्जेक्ट को बंद नहीं किया गया था जो यहां खोला गया था। बंद करें() को कभी स्पष्ट रूप से नहीं बुलाया गया था डेटाबेस और कुछ और डेटाबेस त्रुटियां भी दिखाती हैं –

1

शायद आपकी क्वेरी एक खाली और moveToFirst झूठी लौटा रहा है आ रहा है।

कथन से पहले c.getCount() के मान को लॉग इन करने के बारे में क्या?

+0

c.getCount() लॉगिंग करते समय सही ढंग से दिखाए गए पंक्तियों की संख्या। –

+1

फिर आपके कोड को काम करना चाहिए। क्या यह वास्तविक कोड है जिसका आप उपयोग कर रहे हैं? –

+0

धन्यवाद मैथ्यू विलिस। मेरा वास्तविक कोड यहां पोस्ट किए गए जैसा दिखता है। –

2

मैं कर्सर का उपयोग कर db से मूल्यों को पुन: प्राप्त करने और स्क्रीन पर प्रदर्शित करने के साथ एक समान मुद्दा था .. नीचे समाधान मेरे लिए काम करता ..

  Cursor cur = db.getAllValues(); 
      int index = c.getColumnIndex("date"); 
    cur.moveToFirst(); 

    while (cur.isAfterLast() == false) { 
     System.out.println(cur.getString(index)); // For debug purposes 
     String date = cur.getString(index); 
     try { 
      ob = new objectname(); 
      ob.setDate(date); 
      resultList.add(ob); 
     } catch (Exception e) { 
      Log.e(MY_DEBUG_TAG, "Error " + e.toString()); 
     } 
     cur.moveToNext(); 
    } 
    cur.close(); 
+0

धन्यवाद शुक्र। मैंने यह भी कोशिश की लेकिन काम नहीं कर रहा। –

संबंधित मुद्दे