Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.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
ANDROID,JAVA:使用游标和循环获得重复结果 我是java中的NOOB,但我有一些C++知识,所以我用这个考虑做了循环。 我试图从两个数组中获取数据,其中包含数据库中的表名。如果任何表中的任何一个元素等于另一个表的元素,则两个表的两个名称都将保存在另一个数组中。这种情况一直持续到阵列结束。现在由于一些问题,每个游标多次包含同一个表,但我想我已经处理好了。 现在,通过使用下面的逻辑,我应该得到一个或两个不同的表对,但相反,我一次又一次地得到相同的表对。我多次改变循环顺序和逻辑,但这种形式至少给出了结果。 我认为问题在于逻辑而不是语法。我哪里出错了_Java_Android_Arrays_Loops_Cursor - Fatal编程技术网

ANDROID,JAVA:使用游标和循环获得重复结果 我是java中的NOOB,但我有一些C++知识,所以我用这个考虑做了循环。 我试图从两个数组中获取数据,其中包含数据库中的表名。如果任何表中的任何一个元素等于另一个表的元素,则两个表的两个名称都将保存在另一个数组中。这种情况一直持续到阵列结束。现在由于一些问题,每个游标多次包含同一个表,但我想我已经处理好了。 现在,通过使用下面的逻辑,我应该得到一个或两个不同的表对,但相反,我一次又一次地得到相同的表对。我多次改变循环顺序和逻辑,但这种形式至少给出了结果。 我认为问题在于逻辑而不是语法。我哪里出错了

ANDROID,JAVA:使用游标和循环获得重复结果 我是java中的NOOB,但我有一些C++知识,所以我用这个考虑做了循环。 我试图从两个数组中获取数据,其中包含数据库中的表名。如果任何表中的任何一个元素等于另一个表的元素,则两个表的两个名称都将保存在另一个数组中。这种情况一直持续到阵列结束。现在由于一些问题,每个游标多次包含同一个表,但我想我已经处理好了。 现在,通过使用下面的逻辑,我应该得到一个或两个不同的表对,但相反,我一次又一次地得到相同的表对。我多次改变循环顺序和逻辑,但这种形式至少给出了结果。 我认为问题在于逻辑而不是语法。我哪里出错了,java,android,arrays,loops,cursor,Java,Android,Arrays,Loops,Cursor,我的代码是: int maa; for (int i = 0; i < ArraySource.size(); i++) { // cursor for source Cursor sourceCursor = myDB.rawQuery("SELECT * FROM '" + ArraySource.get(i) + "';", null); int sourceIndex = sourceCursor.getColu

我的代码是:

    int maa;

    for (int i = 0; i < ArraySource.size(); i++) {

        // cursor for source

        Cursor sourceCursor = myDB.rawQuery("SELECT * FROM '" + ArraySource.get(i) + "';", null);
        int sourceIndex = sourceCursor.getColumnIndex("Stop");

        for (int ii = 0; ii < ArrayDest.size(); ii++) {

            // counter for finding match
            maa=0;


            Cursor destCursor = myDB.rawQuery("SELECT * FROM '" + ArrayDest.get(ii) + "';", null);
            int destIndex = destCursor.getColumnIndex("Stop");

            sourceCursor.moveToFirst();
            String nameSource = sourceCursor.getString(sourceIndex);
            destCursor.moveToFirst();
            String nameDest = destCursor.getString(destIndex);

            // data is repeated many times in the cursor, so this is hack to take the first result and check with every result
            // so if match is found loop is broken

            // But to do that first result should be taken out of loop, hence the following
            // First result of first cursor checking with first result of second cursor

            if (nameSource.equals(nameDest)){

                IndirectArray1.add(ArraySource.get(i));
                IndirectArray2.add(ArrayDest.get(ii));
                maa=1;

            }else {

                //checking with all results of second cursor
                for (destCursor.moveToNext(); !destCursor.isAfterLast(); destCursor.moveToNext()) {

                    if(nameDest.equals(destCursor.getString(destIndex))){

                        break;
                    }

                    if (nameSource.equals(destCursor.getString(destIndex))) {

                        IndirectArray1.add(ArraySource.get(i));
                        IndirectArray2.add(ArrayDest.get(ii));
                        maa=1;
                        break;

                    }
                }
            }
            // condition for running nexr for loop above logic is used in following loop
            if(maa ==0){

                MsMoot:
                for (sourceCursor.moveToNext(); !sourceCursor.isAfterLast(); sourceCursor.moveToNext()) {

                    destCursor.moveToFirst();

                    if (nameSource.equals(sourceCursor.getString(sourceIndex))) {

                        break;

                    }

                    if (sourceCursor.getString(sourceIndex).equals(destName)) {

                        IndirectArray1.add(ArraySource.get(i));
                        IndirectArray2.add(ArrayDest.get(ii));
                        break;

                    }else {

                        for (destCursor.moveToNext(); !destCursor.isAfterLast(); destCursor.moveToNext()) {

                            if (destCursor.getString(destIndex).equals(nameDest)) {

                                break;

                            }

                            if (sourceCursor.getString(sourceIndex).equals(destCursor.getString(destIndex))) {

                                IndirectArray1.add(ArraySource.get(i));
                                IndirectArray2.add(ArrayDest.get(ii));
                                break MsMoot;

                            }
                        }
                    }
                }
            // closing cursors
            }destCursor.close();

        }sourceCursor.close();

    }

它看起来像无限循环。您将获得重复的行,因为您尝试循环所有内容,并且多次重复。在结果中,您多次获得每个表的第一行,然后某些值在某些时候被标记为相同。游标对特定表进行查询,并存储数据。现在,您应该读取所有数据,并以更人性化的方式存储它们。然后检查存储的数据是否相等。下面是示例代码。 @编辑 现在,对于存储在ArraySource列表中的每个表,您正在为ArrayTest列表中的每个表调用查询,然后我放入foreach循环,检查firstList中的每个字符串是否等于secondList中的每个字符串。这应该能正常工作。


据我所知,此循环将检查firstlist的第一个结果和secondlist的所有结果,然后检查firstlist的第二个结果和secondlist的所有结果,依此类推。我是否应该在j循环之上为firstlist的所有结果添加一个额外的循环?它成功了!谢谢你的逻辑。您的解决方案总共为我节省了100多行。
for(int i = 0; i < ArraySource.size(); i++) {
                List<String> firstList = new ArrayList<>();
                List<String> secondList = new ArrayList<>();
                Cursor sourceCursor = myDB.rawQuery("SELECT * FROM '" + ArraySource.get(i) + "';", null);

                if(sourceCursor != null) {
                    if(sourceCursor.moveToFirst()) {
                        do {
                            String a = sourceCursor.getString(0);
                            firstList.add(a);
                        } while(sourceCursor.moveToNext());
                    }
                }

                sourceCursor.close();

                for (int j = 0; j < ArrayDest.length; j++) {

                    Cursor destCursor = myDB.rawQuery("SELECT * FROM '" + ArrayDest.get(j) + "';", null);

                    if (destCursor != null) {
                        if (destCursor.moveToFirst()) {
                            do {
                                String b = destCursor.getString(0);
                                secondList.add(b);
                            } while (destCursor.moveToNext());
                        }
                    }
                    destCursor.close();

                    for (String one : firstList) {
                        for (int k = 0; k < secondList.size(); k++) {
                            String two = secondList.get(k);
                            if (one.equals(two)) {
                                //make your logic here
                            }
                        }
                    }
                }
            }