Вытащить одну строку из базы данных SQLD - PullRequest
0 голосов
/ 12 декабря 2018

Итак, я сейчас пытаюсь извлечь одну строку из моей базы данных, но при попытке я просто получаю эту ошибку.

2018-12-12 06:17:52.499 9065-9065/com.example.caesp.dmtool E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.caesp.dmtool, PID: 9065
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.caesp.dmtool/com.example.caesp.dmtool.CreateCharacter}: java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2955)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3030)
        at android.app.ActivityThread.-wrap11(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
        at android.os.Handler.dispatchMessage(Handler.java:105)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6938)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
     Caused by: java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.
        at android.database.CursorWindow.nativeGetString(Native Method)
        at android.database.CursorWindow.getString(CursorWindow.java:451)
        at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51)
        at com.example.caesp.dmtool.CreateCharacter.onCreate(CreateCharacter.java:128)
        at android.app.Activity.performCreate(Activity.java:7183)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1220)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2908)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3030) 
        at android.app.ActivityThread.-wrap11(Unknown Source:0) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696) 
        at android.os.Handler.dispatchMessage(Handler.java:105) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.app.ActivityThread.main(ActivityThread.java:6938) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374) 

Что касается моей базы данных, это выглядит так

@Override
        public void onCreate(SQLiteDatabase db)
        {
            // query to create a new table named dog
            String CampaignList = "CREATE TABLE Campaigns" +
                    "(CamName TEXT);";

            db.execSQL(CampaignList);// execute the query

            

            String CharacterList = "CREATE TABLE Characters" +
                    "(CharName TEXT," +
                    "Campaign TEXT," +
                    "Class TEXT," +
                    "Level INTEGER," +
                    "Race TEXT," +
                    "Player_Name TEXT," +
                    "STR INTEGER," +
                    "DEX INTEGER," +
                    "CON INTEGER," +
                    "INT INTEGER," +
                    "WIS INTEGER," +
                    "CHA INTEGER," +
                    "First INTEGER," +
                    "Second INTEGER," +
                    "Third INTEGER," +
                    "Fourth INTEGER," +
                    "Fifth INTEGER," +
                    "Sixth INTEGER," +
                    "Seventh INTEGER," +
                    "Eighth INTEGER," +
                    "Ninth INTEGER," +
                    "Acro INTEGER," +
                    "Anhan INTEGER," +
                    "Arc INTEGER," +
                    "Ath INTEGER," +
                    "Dec INTEGER," +
                    "His INTEGER," +
                    "Ins INTEGER," +
                    "Inti INTEGER," +
                    "Inves INTEGER," +
                    "Med INTEGER," +
                    "Nat INTEGER," +
                    "Perc INTEGER," +
                    "Perf INTEGER," +
                    "Pers INTEGER," +
                    "Rel INTEGER," +
                    "Slei INTEGER," +
                    "Ste INTEGER," +
                    "Sur INTEGER," +
                    "Prof_Bon INTEGER," +
                    "Attacks TEXT," +
                    "AC INTEGER," +
                    "InitBon INTEGER," +
                    "Spd INTEGER," +
                    "HP_Max INTEGER," +
                    "HP TEXT," +
                    "Hit_Die TEXT," +
                    "Equip TEXT," +
                    "Backstory TEXT," +
                    "ProfnLang TEXT," +
                    "Feats TEXT," +
                    "SSDC INTEGER," +
                    "SCA TEXT," +
                    "SAB INTEGER," +
                    "Spells TEXT" +
                    ");";

            db.execSQL(CharacterList);
        } // end method onCreate

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion,
                              int newVersion)
        {
        } // end method onUpgrade
    }

И мой метод get и часть действия, которое я пытаюсь выполнить, это

if (RQCode == 2){
            CurrentName = extras.getString("CharName");
            DatabaseConnector dc = new DatabaseConnector(this);
            dc.open();
            Cursor c = dc.getOneCharacter(CurrentName);
            if (c != null && c.moveToFirst()){
                Name.setText(c.getString(c.getColumnIndex("CharName")));
                Player.setText(c.getString(c.getColumnIndex("Player_Name")));
                Level.setText(c.getString(c.getColumnIndex("Level")));
                Race.setText(c.getString(c.getColumnIndex("Race")));
                Class.setText(c.getString(c.getColumnIndex("Class")));
                STR.setText(c.getString(c.getColumnIndex("STR")));
                DEX.setText(c.getString(c.getColumnIndex("DEX")));
                CON.setText(c.getString(c.getColumnIndex("CON")));
                INT.setText(c.getString(c.getColumnIndex("INT")));
                WIS.setText(c.getString(c.getColumnIndex("WIS")));
                CHA.setText(c.getString(c.getColumnIndex("CHA")));
                Acro.setText(c.getString(c.getColumnIndex("Acro")));
                Anhan.setText(c.getString(c.getColumnIndex("Anhan")));
                Arc.setText(c.getString(c.getColumnIndex("Arc")));
                Ath.setText(c.getString(c.getColumnIndex("Ath")));
                Dec.setText(c.getString(c.getColumnIndex("Dec")));
                His.setText(c.getString(c.getColumnIndex("His")));
                Ins.setText(c.getString(c.getColumnIndex("Ins")));
                Inti.setText(c.getString(c.getColumnIndex("Inti")));
                Inves.setText(c.getString(c.getColumnIndex("Inves")));
                Med.setText(c.getString(c.getColumnIndex("Med")));
                Nat.setText(c.getString(c.getColumnIndex("Nat")));
                Perc.setText(c.getString(c.getColumnIndex("Perc")));
                Perf.setText(c.getString(c.getColumnIndex("Perf")));
                Pers.setText(c.getString(c.getColumnIndex("Pers")));
                Rel.setText(c.getString(c.getColumnIndex("Rel")));
                Slei.setText(c.getString(c.getColumnIndex("Slei")));
                Ste.setText(c.getString(c.getColumnIndex("Ste")));
                Surv.setText(c.getString(c.getColumnIndex("Sur")));
                AC.setText(c.getString(c.getColumnIndex("AC")));
                Init.setText(c.getString(c.getColumnIndex("Init")));
                Spd.setText(c.getString(c.getColumnIndex("Spd")));
                HP.setText(c.getString(c.getColumnIndex("HP")));
                HitDice.setText(c.getString(c.getColumnIndex("Hit_Die")));
                ProfBon.setText(c.getString(c.getColumnIndex("Prof_Bon")));
                Attacks.setText(c.getString(c.getColumnIndex("Attacks")));
                Spells.setText(c.getString(c.getColumnIndex("Spells")));
                SAB.setText(c.getString(c.getColumnIndex("SAB")));
                SCA.setText(c.getString(c.getColumnIndex("SCA")));
                SSDC.setText(c.getString(c.getColumnIndex("SSDC")));
                First.setText(c.getString(c.getColumnIndex("First")));
                Second.setText(c.getString(c.getColumnIndex("Second")));
                Third.setText(c.getString(c.getColumnIndex("Third")));
                Fourth.setText(c.getString(c.getColumnIndex("Fourth")));
                Fifth.setText(c.getString(c.getColumnIndex("Fifth")));
                Sixth.setText(c.getString(c.getColumnIndex("Sixth")));
                Seventh.setText(c.getString(c.getColumnIndex("Seventh")));
                Eighth.setText(c.getString(c.getColumnIndex("Eighth")));
                Ninth.setText(c.getString(c.getColumnIndex("Ninth")));
                ProfnLang.setText(c.getString(c.getColumnIndex("ProfnLang")));
                Feats.setText(c.getString(c.getColumnIndex("Feats")));
                Equipment.setText(c.getString(c.getColumnIndex("Equipment")));
                Backstory.setText(c.getString(c.getColumnIndex("Backstory")));
            }


        }

По какой-то причине он застревает в Integer 'Init'.

сейчас моя главная цель - взять информацию, которую я извлекаюмоей базы данных и присоединить ее к группе представлений, которые я настроил в этом упражнении.Я буду работать до полудня, но сделаю все возможное, чтобы общаться с любым, кто хотел бы помочь.

1 Ответ

0 голосов
/ 12 декабря 2018

Проблема в том, что один из getColumnIndex (столбец) не находит соответствующий столбец (и, следовательно, возвращает -1).

Согласно

Возвращает нулевой индекс для указанного имени столбца или -1, если столбец не существует.Если вы ожидаете, что столбец будет существовать, используйте вместо него getColumnIndexOrThrow (String), что сделает ошибку более ясной. Курсор - getColumnIndex

Я считаю, что это потому, что вы использовали Init.setText(c.getString(c.getColumnIndex("Init")));, то есть он пытается найти столбец с именем init когда в таблице он определен как InitBon .

  • Обратите внимание, что есть ошибка с курсором getColumnIndex в том, что он чувствителен к регистру.

Решение проблемы неправильного ввода / неправильного написания / получения неправильных имен столбцов состоит в том, чтобы кодировать их как константы, а затем всегда использовать константы, которые будут точно такими же.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...