променливата на курсора не е разпозната

Имам int данни в sqlite, до които се опитвам да получа достъп, за да покажа състоянието в дейността. По-долу е страницата за дейност с курсора getCA() в помощната дейност на базата данни.

Имам проблем с опитите да получа данните, по-специално "първата" фигура, която е int като променлива, която да се споделя извън класа на ябълката в рамките на същата дейност. Както можете да видите по-долу, опитвам се да „измамя“, като добавя int променливата df (настроена на 0, така че няма ефект върху first) към int променливата първа, за да мога да получа по същество първата цифра.

Но тази нова променлива dfe не се разпознава вътре или извън класа на ябълката? Опитах да го направя „public int“, но се казва, че public не е валиден в този контекст.

      protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    myDb= new DbA(this);
    myDb.open();                
    setContentView(R.layout.mainpage);
            getdata();         
              }

    private void getdata() {
        Cursor cursor = myDb.getCA();
        apple(cursor);              
    }


    private void apple(Cursor cursor) {
        int df = 0;
        if (ur.moveToFirst()) {
            do {
                int first = cursor.getInt(0);
                int coma = cursor.getInt(1);
                String desc = cursor.getString(2);

                // Append data to the message:
                int dfe = df + first;                      

            } while(cursor.moveToNext());

        }

        cursor.close();

        ///this last line below, eclipse cannot recognize 'dfe' as a variable?
        int cot = dfe;
        }

Моля помогнете. Както вероятно можете да разберете, аз съм много нов в android.

Предполагам, че по същество въпросът е как да се споделят променливите, които са извлечени от базата данни в класа apple, с други класове в същата страница за дейност? Благодаря предварително.


person user3492802    schedule 01.06.2014    source източник


Отговори (2)


int dfe се дефинира в цикъл, така че променливата може да има достъп само в цикъл, променете го на променлива на метода

// Append data to the message:
   int dfe = df + first;  

фиксирано: използвайте този метод

private void apple(Cursor cursor) {
        int df = 0;
        int dfe;
        if (cursor.moveToFirst()) {
            do {
                int first = cursor.getInt(0);
                int coma = cursor.getInt(1);
                String desc = cursor.getString(2);

                // Append data to the message:
                    dfe = df + first;                      

            } while(cursor.moveToNext());

        }

        cursor.close();

        int cot = dfe;
    }
person akhilesh0707    schedule 01.06.2014
comment
Благодаря за вашата помощ. работи, но все още трябва да инициира dfe, така че int dfe = 0; вместо int dfe; - person user3492802; 01.06.2014

Изглежда, че и вие сте нов в Java. ;)

Във вашия код apple не е клас, а метод.
Вие дефинирате класове с class Name и той трябва да бъде в собствен файл (освен ако не искате вътрешен клас, но предполагам, че не искате).

Причината да получавате тази грешка е, че методите не задават модификатори на видимост в своите полета, те са лични за метода (или в рамките на scope, който са декларирани. Ако искате достъп до променлива както в, така и извън метод ( или цикъл) трябва да го декларирате извън съдържащия клас или метод.
Същото важи и за вашата променлива dfe, тя е декларирана във вашия do...while цикъл и не може да се види извън него.

Трябва да прочетете на variable scope, за да разрешите проблемите си.


Не съм сигурен дали сте объркали терминологията си, наричайки apple клас или наистина сте го искали като клас. Ако го искате като клас, ето какво можете да направите:

public Apple {
    // declare the fields you want to store for Apple
    private int dfe;
    private String description;

    public Apple(int first, int coma, String description)
        // use the arguments to set your variables
        this.dfe = //some calculation
        this.description = description;
    }

    // define methods for accessing the fields
    public int getDfe() {
        return this.dfe;
    }
    public String getDescription() {
        return this.description;
    }
}

И след това в метода за четене на курсора:
(предполагам, че съдържа повече от един резултат)

public List<Apple> getDemApples(Cursor cursor) {
    List<Apple> apples = new ArrayList<Apple>();
    if (cursor != null) {
        int tempFirst;
        int tempComa;
        String tempDescription;

        cursor.moveToFirst();
        while (!cursor.isAfterLast()) {
            tempFirst = cursor.getInt(0);
            tempComa = cursor.getInt(1);
            tempDescription = cursor.getString(2);
            apples.add(new Apple(tempFirst, tempComa, tempDescription));
            cursor.moveToNext();
        }
    }
    return apples;
}

Или нещо в тази насока. Отново може да съм изтълкувал погрешно това, което се опитвате да направите.

person indivisible    schedule 01.06.2014
comment
Благодаря много за вашето много подробно обяснение. Това, което казахте, има смисъл. Отговорихте на въпроси, които дори не се сетих да задам. Прав си, има повече от една информация, тъй като всъщност се опитвам да вляза в настройките на предпочитанията, за да ги покажа обратно на потребителя. - person user3492802; 01.06.2014
comment
Опитах също да направя public void(cursor c), но променливата dfe все още не се разпознава извън метода. (благодаря за обяснението на разликата между клас и метод, btw). - person user3492802; 01.06.2014