【问题标题】:Garabage value in list列表中的垃圾值
【发布时间】:2012-05-02 08:25:41
【问题描述】:

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

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

total.xml

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

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

【问题讨论】:

  • 我要查看多个表中的数据

标签: android sqlite list garbage


【解决方案1】:

这不是垃圾值引用(内存)地址,使用下面的代码就可以了。

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

【讨论】:

  • 你能解释一下吗?我很想知道为什么该代码有效
  • 观察我发送的结果.add()
  • @BhaskarReddy 感谢您的回复.. 实际上数据来自两个表.. 它现在向我显示第一个(cust_name).. 而不是垃圾......所以这很好......但现在在第 3 列中给出 0……应该有 pro_price 的值……这不是 0
  • @BhaskarReddy 我根据我的情况将 ans 从 ... pro_nameColumnIndex = c.getString.... 和 pro_priceColumnIndex = c.getInt... 更改为 d.getString...因为所有三个值都来自不同的光标...但会接受您的帮助以帮助我.. :)
【解决方案2】:

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

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

【讨论】:

  • 数据来自多个表..即cust_name 来自 tbl_cust,pro_name/price 来自 tbl_prod...
猜你喜欢
  • 2019-12-25
  • 1970-01-01
  • 2017-10-28
  • 2022-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-15
相关资源
最近更新 更多