这是我尝试将光标中的元素添加到 ArrayList 的类。
public ArrayList<String> getArrayList()
{
int i;
sdb=this.getReadableDatabase();
c=null;
ArrayList<String> list=null;
try{
c=sdb.rawQuery("select * from Products", null);
c.moveToFirst();
if(c!=null)
{
list=new ArrayList<String>();
do
{
for(i=1;i<=c.getColumnCount();i++)
{
list.add(c.getString(c.getColumnIndex("ProductName")));
list.add(c.getString(c.getColumnIndex("ProduceType")));
list.add(c.getString(c.getColumnIndex("Company")));
list.add(c.getString(c.getColumnIndex("Price")));
list.add(c.getString(c.getColumnIndex("Quantity")));
}
}while(c.moveToNext());
}
else
System.out.println("c null");
}catch(Exception e)
{
e.printStackTrace();
//c=null;
}
/*finally{
if(c!=null && !c.isClosed())
{
c.close();
c=null;
}
close();
}*/
return list;
}
这是我尝试从 ArrayList 检索数据并将它们添加到expandablelistview的地方。我希望组视图中游标中每一行的第一列和子项中相应行的其余列图。
private void loadData(){
db=new DatabaseHelper(this);
//db.open();
System.out.println("returned from db.open() in loadData");
ArrayList<String> al=db.getArrayList();
db.close();
int count=al.size();
int i,j;
try{
for(i=1;i<=count;i=i+5)
{
String pn=al.get(i);
for(j=i;j<=i+5;j++)
{
String inf=al.get(j);
addProduct(pn,inf);
}
}
}catch(StackOverflowError e)
{
e.printStackTrace();
}
}
据我所知,我的for循环出错.Logcat显示以下错误
07-04 02:44:14.747: E/CursorWindow(1881): Failed to read row 0, column -1 from a CursorWindow which has 3 rows, 5 columns.
请告诉我arraylist数据检索的正确用法。谢谢。
答案 0 :(得分:2)
我建议采用这种方法,因为你使用的方法是一种不好的做法。
不使用List of String,而是使用名为ProductInfo
的自定义对象(包括所有这些字符串),并添加和检索该列表中的数据。
public class ProductInfo{
String productName, productType, company, price, quantity;
//getter setter
}
// add data
List<ProductInfo> productList = new ArrayList<ProductInfo>();
Cursor c = null;
do {
for (int i = 1; i <= c.getColumnCount(); i++) {
ProductInfo pInfo = new ProductInfo();
pInfo.setProductName(c.getString(c
.getColumnIndex("ProductName")));
pInfo.setProductType(c.getString(c
.getColumnIndex("ProduceType")));
pInfo.setCompany(c.getString(c.getColumnIndex("Company")));
pInfo.setPrice(c.getString(c.getColumnIndex("Price")));
pInfo.setQuantity(c.getString(c.getColumnIndex("Quantity")));
productList.add(pInfo);
}
} while (c.moveToNext());
// retrieve data
for (int i = 0; i < productList.size(); i++) {
System.out.println("Info of Product "+(i+1));
ProductInfo pInfo = productList.get(i);
System.out.println("Prod name: "+ pInfo.getProductName());
System.out.println("Prod Type: "+pInfo.getProductType());
System.out.println("Company: "+pInfo.getCompany());
System.out.println("Price: "+pInfo.getPrice());
System.out.println("Quantity: "+pInfo.getQuantity());
}
答案 1 :(得分:0)
请尝试这种方式,希望这有助于您解决问题。
public ArrayList<HashMap<String, String>> getArrayList() {
int i;
sdb = this.getReadableDatabase();
c = null;
ArrayList<HashMap<String, String>> list = null;
try {
c = sdb.rawQuery("select * from Products", null);
c.moveToFirst();
if (c != null) {
list = new ArrayList<HashMap<String, String>>();
do {
for (i = 1; i <= c.getColumnCount(); i++) {
HashMap<String, String> row = new HashMap<String, String>();
row.put("ProductName", c.getString(c.getColumnIndex("ProductName")));
row.put("ProduceType", c.getString(c.getColumnIndex("ProduceType")));
row.put("Company", c.getString(c.getColumnIndex("Company")));
row.put("Price", c.getString(c.getColumnIndex("Price")));
row.put("Quantity", c.getString(c.getColumnIndex("Quantity")));
list.add(row);
}
} while (c.moveToNext());
} else
System.out.println("c null");
} catch (Exception e) {
e.printStackTrace();
//c=null;
}
/*finally{
if(c!=null && !c.isClosed())
{
c.close();
c=null;
}
close();
}*/
return list;
}
private void loadData() {
db = new DatabaseHelper(this);
//db.open();
System.out.println("returned from db.open() in loadData");
ArrayList<HashMap<String, String>> al = db.getArrayList();
db.close();
int count = al.size();
int i, j;
try {
for (HashMap<String, String> product : al) {
System.out.println("ProductName: " + product.get("ProductName"));
System.out.println("ProduceType: " + product.get("ProduceType"));
System.out.println("Company: " + product.get("Company"));
System.out.println("Price: " + product.get("Price"));
System.out.println("Quantity: " + product.get("Quantity"));
}
} catch (StackOverflowError e) {
e.printStackTrace();
}
}