好吧,我得让学校的一个项目;因为我的项目有很多的领域,我想表明它在RecyclerView,创造了许多对象,以显示它们。
那么,事情是,有时我得到一个String和一个Int。我的目的是创建一些对象是他们(字符串的ColumnName,int值)。
我已经尝试了很多关于这个代码,但我不知道这样做它的工作原理,现在它说,它无法在第一次如果。让我们深入到代码。
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)
n = fila.getColumnCount();
这将设置n
是在结果列的数目。如果你使用它来访问列它总是会出界,因为有0到n-1仅列。这依赖于你正在努力实现你必须改变你确定n
的方式。