0

我正在填充列表视图以查看我的记录,我有以下代码...

            super.onCreate(savedInstanceState);
            setContentView(R.layout.total);
            ArrayList<Object> results = new ArrayList<Object>();
            // -- SQLiteOpenHelper dbHelper = new DatabaseHelper(this, SAMPLE_DB_NAME, null, 1);

            SQLiteDatabase myDB = this.openOrCreateDatabase(SAMPLE_DB_NAME, SQLiteDatabase.OPEN_READONLY, null);
            try { 
                 /* Create the Database (no Errors if it already exists) */
                           myDB.execSQL("PRAGMA foreign_keys = ON;");

                            // -- openOrCreateDatabase(name, mode, factory)
                            // myDB = dbHelper.getReadableDatabase();
                    Cursor c = myDB.query(DatabaseHelper.SAMPLE_TABLE_NAME, null, null, null, null, null, null);
                    Cursor d = myDB.query(DatabaseHelper.SAMPLE_TABLE_NAMES, null, null, null, null, null, null);

                    /* Check if our result was valid. */ 
                if (c != null && d != null) {

                    c.moveToFirst(); // it's very important to do this action otherwise your Cursor object did not get work
                    d.moveToFirst();
                    char cust_name = (char) c.getColumnIndex("cust_name");
                    char pro_name = (char) d.getColumnIndex("pro_name");
                    int pro_price = (int) d.getColumnIndex("pro_price");

                     /* Check if at least one Result was returned. */ 
                     if (c.isFirst() && d.isFirst()) { 
                          int i = 0; 
                          /* Loop through all Results */ 
                          do { 
                               i++; 
                               String cust_nameColumnIndex = c.getString(cust_name);
                               String pro_nameColumnIndex = c.getString(pro_name);
                               int pro_priceColumnIndex = c.getInt(pro_price);


                               /* Add current Entry to results. */ 
                               results.add("" + i + ": " + cust_name + " (" + pro_name + ": " + pro_price + ")"); 
                          } while (c.moveToNext()&& d.moveToNext());

                     } 
                }

            } catch (SQLiteException e) { 
            } finally { 
                 if (myDB != null) 
                      myDB.close(); 
            }

            // -- android.R.layout.simple_list_item_1 is object which belong to ListActivity itself
            // -- you only need to add list object in your main layout file
            this.setListAdapter(new ArrayAdapter<Object>(this, android.R.layout.simple_list_item_1, results)); 
        }

总.xml

 <ListView
            android:id="@id/android:list"
            android:layout_width="fill_parent"
            android:layout_height="380dp"
            android:cacheColorHint="#00000000" >
        </ListView>

数据已成功插入 sqlite(从 adb shell 确认)...它给了我垃圾值...任何人都可以解决这个问题....提前致谢

在此处输入图像描述

4

2 回答 2

3

那不是垃圾值引用(内存)地址,使用下面的代码它将起作用。

 do { 
                               i++; 
                               String cust_nameColumnIndex = c.getString(cust_name);
                               String pro_nameColumnIndex = c.getString(pro_name);
                               int pro_priceColumnIndex = c.getInt(pro_price);


                               /* Add current Entry to results. */ 
                               results.add("" + i + ": " + cust_nameColumnIndex + " (" + pro_nameColumnIndex + ": " + pro_priceColumnIndex + ")"); 
                          } while (c.moveToNext()&& d.moveToNext());



this.setListAdapter(new ArrayAdapter<Object>(this, android.R.layout.simple_list_item_1, (String[]) results.toArray(new String[0])));
于 2012-05-02T08:34:56.823 回答
0

尝试改变阅读光标的方式。类似的东西可能会更好:

//Get the indexes
        int cust_name =  cursor.getColumnIndex("cust_name");
        int pro_name =  cursor.getColumnIndex("pro_name");
        int pro_price =  cursor.getColumnIndex("pro_price");

        try {
            if(cursor.moveToFirst()){
                while (!cursor.isAfterLast()) {

                    //Get the data
                    String cust_nameColumnIndex = cursor.getString(cust_name);
                    String pro_nameColumnIndex = cursor.getString(pro_name);
                    int pro_priceColumnIndex = cursor.getInt(pro_price);

                    //Move to next cursor item
                    cursor.moveToNext();
                }
            }
            else {
                Log.i(TAG, "Empty cursor");
                //Do whatever
            }
        } catch (Exception e) {
            Log.i(TAG, "Exception while reading cursor: " + e.getMessage());
            //Do whatever
        }
        finally {
            cursor.close();
        }    
于 2012-05-02T08:39:56.127 回答