无限循环。从数据库中读取数据并将它们与if语句进行比较

时间:2014-06-07 17:47:08

标签: android database sqlite loops

我的英语有点生疏,但我会试着解释一下我想做什么。

我有一个数据库,里面有5行。 我想做这样的事情:

  1. 从数据库中读取n行。
  2. 将数据从数据库分配给变量
  3. 检查变量是否属于条件
    if(((szerokosc<=a)&&(szerokosc>=b)) && ((dlugosc>=c)&&(dlugosc<=d)))
  4. 如果是,则显示(opis)
  5. 如果没有,请显示(brak danych)
  6. 如果行的结尾是第一个
  7. 如果存在下一行,请转到它,
  8. 我想一遍又一遍地做这件事;

    public void onLocationChanged(Location location)
    {
        showLocation(location);
        showAdditionalInfo(location);
        if(savedLocation == null)
        savedLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
        DataBaseHelper zb = new DataBaseHelper(getApplicationContext());
        double szerokosc = location.getLatitude();
        double dlugosc = location.getLongitude();
        Cursor k = zb.dajCos();
        String lokalizacja = "Jestes na: ";
        while(k.moveToNext())
        {
            nazwa = k.getString(0);
            szmax= k.getDouble(1);
            szmin= k.getDouble(2);
            dlmin= k.getDouble(3);
            dlmax= k.getDouble(4);
            opis = k.getString(5);
            a=szmax;
            b=szmin;
            c=dlmin;
            d=dlmax; 
            if(k.moveToNext()==false){k.moveToFirst();}
        }
        if(((szerokosc&lt;=a)&&(szerokosc&gt;=b)) && ((dlugosc&gt;=c)&&(dlugosc&lt;=d)))
        {
            lokalizacja =nazwa+opis;
        }
        else
        {
            lokalizacja ="brak danych";
        }
        tvLokalizacja.setText(lokalizacja);
    }
    

    这是公共游标dajCos()

    public Cursor dajCos() 
    {
         String[] kolumny={"nazwa","szmax","szmin","dlmin","dlmax","opis"};
         SQLiteDatabase db = getReadableDatabase();
         Cursor kursor = db.query("obiekty", kolumny, null, null, null, null, null);
         return kursor;
    }
    

    我不知道如何更好地解释这一点。我将尝试以这种方式描述这一点。

    在数据库中,我有5条记录,每条记录都包含坐标。 例如:我的位置对应于第二行的坐标,我想显示你在&#34; zone1&#34;,我移动十米远,我的位置不匹配任何一行的坐标所以我想要要显示&#34;没有数据&#34;,我移动十五米远,然后第四行坐标与我的位置匹配,并显示你在&#34; zone2&#34;。

    我希望你能理解我的意思并帮助我。 谢谢。

2 个答案:

答案 0 :(得分:0)

我有这个循环:

k.moveToFirst();
        //iterate over rows
        for (int i = 0; i < k.getCount(); i++) {

           nazwa = k.getString(0);
        szmax= k.getDouble(1);
           szmin= k.getDouble(2);
           dlmin= k.getDouble(3);
        dlmax= k.getDouble(4);
        opis = k.getString(5);
         a=szmax;
            b=szmin;
            c=dlmin;
            d=dlmax;

            wypisz +=i+nazwa+"-"+a+"-"+opis+"\n";
            tvBaza.setText(wypisz);

            k.moveToNext();

            }

k.moveToFirst(); //iterate over rows for (int i = 0; i < k.getCount(); i++) { nazwa = k.getString(0); szmax= k.getDouble(1); szmin= k.getDouble(2); dlmin= k.getDouble(3); dlmax= k.getDouble(4); opis = k.getString(5); a=szmax; b=szmin; c=dlmin; d=dlmax; wypisz +=i+nazwa+"-"+a+"-"+opis+"\n"; tvBaza.setText(wypisz); k.moveToNext(); } 循环执行5次因为我在数据库中有5行。我想把它改为一遍又一遍地执行。

答案 1 :(得分:0)

你可以给我一个线索吗?我不知道怎么解释这个。 我的数据库有5行。他们看起来像那样:


1 Zone_A(nazwa),50.03233693(dlmax),50.0281259(dlmin),22.00383871(szmin),22.0094177(szmax),你在zone_A(opis)。


如你所见,我有坐标和名字。 我的目标是实现这样的目标。

当我的位置发生变化时,我会进入数据库检查每一行,如果其中一行的坐标是语句

    if(((szerokosc<=a)&&(szerokosc>=b)) && ((dlugosc>=c)&& (dlugosc<=d)))`

其中

    a=szmax;b=szmin;c=dlmin;d=dlmax; 

    double szerokosc = location.getLatitude();
    double dlugosc = location.getLongitude();

如果他们匹配显示(nazwa + opis),如果没有显示(brak danych)。 当我移动数据时

    double szerokosc = location.getLatitude();
    double dlugosc = location.getLongitude();

也在改变。

所以我必须进入数据库againg以检查其中一行是否适合从GPS获得的新坐标,这些坐标保存在

    double szerokosc = location.getLatitude();
    double dlugosc = location.getLongitude();