Чтение разного рода данных в SQLite - PullRequest
0 голосов
/ 03 февраля 2019

Ну, я должен сделать проект для школы;так как в моем проекте много полей, я хочу показать его в RecyclerView, создав множество объектов для их отображения.

Итак, иногда я получаю String и Int.Я намеревался создать несколько объектов (String ColumnName, Int Value).

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

public AdminSQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

@Override
public void onCreate(SQLiteDatabase BaseDeDatos) {
        BaseDeDatos.execSQL("create table personajes(apellido text primary key, nombre text, edad int, genero text, raza text, clase text, " +
                "fuerza int, destreza int, resistencia int, inteligencia int, percepcion int, voluntad int, carisma int, apariencia int, manipulacion int, " +
                "pelea int, atletismo int, robar int, sigilo int, nadar int, montar int, abrirCerr int, resDolorF int, escalar int, evadir int, esquivar int, bloquear int, " +
                "alerta int, supervivencia int, rastrear int, concentracion int, buscar int, esconderse int, resDolorM int, estrategia int, escuchar int, conGeneral int, tasar int, " +
                "mentir int, empatia int, liderazgo int, intimidar int, callejeo int, comercio int, seducir int, protocolo int, convencer int, actuar int, timar int, disfraz int, " +
                "tecnicasHechizos text, inventario text)");


}

AdminSQLiteOpenHelper admin = new AdminSQLiteOpenHelper(this, "personajes",null, 5);

    SQLiteDatabase BaseDeDatos = admin.getReadableDatabase();

    Cursor fila = BaseDeDatos.rawQuery("select * from personajes", null);

    int n = 0;

    if(fila.moveToFirst()){
        apellido.setText(fila.getString(n));
        n = fila.getColumnCount();

        System.out.println("apellido");
    }

    fila.moveToNext();
    do{

        if (fila.getColumnName(n).equalsIgnoreCase("nombre")) {
            nombre.setText(fila.getString(n));
            n = fila.getColumnCount();
            System.out.println("nombre");
        } else if (fila.getColumnName(n).equalsIgnoreCase("edad")) {
            edad.setText(fila.getInt(n) + "");
            n = fila.getColumnCount();
            System.out.println("edad");
        } else if (fila.getColumnName(n).equalsIgnoreCase("genero")) {
            genero.setText(fila.getString(n));
            n = fila.getColumnCount();
        } else if (fila.getColumnName(n).equalsIgnoreCase("raza")) {
            raza.setText(fila.getString(n));
            n = fila.getColumnCount();
        } else if (fila.getColumnName(n).equalsIgnoreCase("clase")) {
            clase.setText(fila.getString(n));
            n = fila.getColumnCount();
        } else if (fila.getColumnName(n).equalsIgnoreCase("tecnicasHechizos")) {

        } else if(fila.getColumnName(n).equalsIgnoreCase("inventario")){

        }else{
            if(fila.isNull(n)){
                Tiradas_Ficha secundarias = new Tiradas_Ficha(fila.getColumnName(n), 0);
                this.tiradas.add(secundarias);
            }else{
                Tiradas_Ficha secundarias = new Tiradas_Ficha(fila.getColumnName(n), fila.getInt(n));
                this.tiradas.add(secundarias);
            }
        }
        n++;
    }while(fila.moveToNext());
    admin.close();
    BaseDeDatos.close();
}

Исключение составляют: -

Caused by: java.lang.ArrayIndexOutOfBoundsException: length=52; index=52
        at android.database.AbstractCursor.getColumnName(AbstractCursor.java:340)
        at com.example.eag.myapplication.Visualizacion_Ficha.actualizarTiradas(Visualizacion_Ficha.java:63)
        at com.example.eag.myapplication.Visualizacion_Ficha.onCreate(Visualizacion_Ficha.java:32)
        at android.app.Activity.performCreate(Activity.java:7383)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1218)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3250)

1 Ответ

0 голосов
/ 03 февраля 2019
n = fila.getColumnCount();

Это установит n в число столбцов в результате.Если вы затем используете его для доступа к столбцам, он всегда будет выходить за пределы, поскольку доступны только столбцы 0..n-1.В зависимости от того, что именно вы пытаетесь достичь, вам придется изменить способ определения n.

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