Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用SQLOpenHelper获取ArrayList不起作用_Java_Android_Sqliteopenhelper - Fatal编程技术网

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
    参数来完成,请参阅。