Java 使用SQLOpenHelper获取ArrayList不起作用
我的Java 使用SQLOpenHelper获取ArrayList不起作用,java,android,sqliteopenhelper,Java,Android,Sqliteopenhelper,我的SQLiteOpenHelper类有问题。 我有一个数据库与打印机制造商和任何类型的打印机的详细信息。 我尝试使用此代码从数据库中获取所有制造商,并将它们返回到arraylist中 // Read database for All printer manufacturers and return a list public ArrayList<String> getPrManufacturer(){ ArrayList<String> manufacturer
SQLiteOpenHelper
类有问题。
我有一个数据库与打印机制造商和任何类型的打印机的详细信息。
我尝试使用此代码从数据库中获取所有制造商,并将它们返回到arraylist中
// Read database for All printer manufacturers and return a list
public ArrayList<String> getPrManufacturer(){
ArrayList<String> manufacturerList = new ArrayList<String>();
SQLiteDatabase db = getReadableDatabase();
Cursor cursor = db.query(CoDeskContract.Printer.TABLE_NAME,
printerManuProjection, null, null, null, null, null,null);
// If cursor is not null and manufacturer List
// does not contains Manufacturer in the list then add it!
if ((cursor != null) && (cursor.getCount()>0)){
cursor.moveToFirst();
do {
String cursorManufacturer = cursor.getString(0);
//Checking for manufacturer in the list
for(String manufacturerInList:manufacturerList){
if (!manufacturerInList.equals(cursorManufacturer))
manufacturerList.add(cursorManufacturer);
}
}while(cursor.moveToNext());
}
// Return list of manufacturers from database
return manufacturerList;
}
//读取所有打印机制造商的数据库并返回列表
公共阵列列表getPrManufacturer(){
ArrayList manufacturerList=新的ArrayList();
SQLiteDatabase db=getReadableDatabase();
Cursor Cursor=db.query(代码skcontract.Printer.TABLE_NAME,
printerManuProjection,null,null,null,null,null,null,null);
//如果光标不为空,则显示制造商列表
//列表中不包含制造商,请添加它!
如果((cursor!=null)&&(cursor.getCount()>0)){
cursor.moveToFirst();
做{
字符串cursorManufacturer=cursor.getString(0);
//检查列表中的制造商
用于(字符串manufacturerList:manufacturerList){
如果(!manufacturerInList.equals(cursorManufacturer))
制造商列表添加(游标制造商);
}
}while(cursor.moveToNext());
}
//从数据库返回制造商列表
返回制造商列表;
}
我希望每个制造商都是一个列表中的一个。
不知怎的,我无法让它工作。
我还是个新手
感谢您的帮助。用于检查ArrayList中是否存在项,或者是否将代码更改为:
// does not contains Manufacturer in the list then add it!
if ((cursor != null) && (cursor.getCount()>0)){
cursor.moveToFirst();
do {
String cursorManufacturer = cursor.getString(0);
//Checking for manufacturer in the list
if (!manufacturerList.contains(cursorManufacturer)) {
manufacturerList.add(cursorManufacturer);
} else {
System.out.println("cursorManufacturernot found");
}
}while(cursor.moveToNext());
}
您还可以在SQLite()中使用distinct关键字。使用SQLiteDatabase.rawQuery(字符串查询,字符串[]args)进行此操作
db.rawQuery(“从“+CoDeskContract.Printer.TABLE_name,null”中选择不同的名称)代码>有两个问题:
在开始时,当列表manufacturerInList
为空时,它将不会进入for(String manufacturerInList:manufacturerList){
循环,因此它将永远不会在列表中添加任何条目
解决问题1后,如果(!manufacturerInList.equals(cursorManufacturer))
检查列表中的每个条目,并可能多次将不匹配的条目添加到列表中,则问题1仍将不起作用
要解决此问题,您有两种选择
选项1:使用包含的内容作为:
if (!manufacturerList.contains(cursorManufacturer)) {
manufacturerList.add(cursorManufacturer);
}
选项2:使用matchFound
布尔标志作为:
String cursorManufacturer = cursor.getString(0);
boolean matchFound = false;
//Checking for manufacturer in the list
for(String manufacturerInList:manufacturerList){
if (manufacturerInList.equals(cursorManufacturer)){
matchFound = true;
break;
}
}
if(!matchFound){ // <- doesn't exit in the list
manufacturerList.add(cursorManufacturer);
}
String cursorManufacturer=cursor.getString(0);
布尔匹配发现=假;
//检查列表中的制造商
用于(字符串manufacturerList:manufacturerList){
if(manufacturerInList.equals(cursorManufacturer)){
matchFound=true;
打破
}
}
如果(!matchfind){//谢谢您向我解释:)@Katamave如果您认为这有帮助,请不要忘记接受答案。这也可以使用query()方法的distinct
参数来完成,请参阅。