Pregunta

Mi aplicación permite a un usuario llamar al número más reciente al que se llamó.Al presionar el botón "Llamar" con un cuadro de texto vacío, obtendrá el último número saliente en mi base de datos ORM.Sin embargo, el problema ocurre sólo en algunos teléfonos.

Cuando extraigo mis datos lo hago con el siguiente código:

Dao<RecentCallsInfo, Integer> dao = null;
if (getActivity() instanceof MainActivity) {
    MainActivity main = (MainActivity) getActivity();
    dao = main.getDatabaseHelper().getRecentDataDao();
}

QueryBuilder<RecentCallsInfo, Integer> qb = dao.queryBuilder();
qb.orderBy(RecentCallsInfo.RECENT_COLUMN_ID, false);
qb.where().eq(RecentCallsInfo.RECENT_COLUMN_CALL_TYPE, "Outgoing");

// when you are done, prepare your query and build an iterator
CloseableIterator<RecentCallsInfo> iterator = dao.iterator(qb.prepare());

// get the raw results which can be cast under Android
AndroidDatabaseResults results = (AndroidDatabaseResults)iterator.getRawResults();
Cursor c = results.getRawCursor();

if(c.moveToFirst()){
    if(!c.getString(RecentQuery.COLUMN_NUM).isEmpty()){
        System.out.println("Recent Record: \n Name:" + c.getString(RecentQuery.COLUMN_NAME) + 
        "\nNum:" + c.getString(RecentQuery.COLUMN_NUM) + "\nNumType:" + c.getString(RecentQuery.COLUMN_NUM_TYPE)+ 
        "\nCallType:" + c.getString(RecentQuery.COLUMN_CALL_TYPE));

        etcalle.setText(c.getString(RecentQuery.COLUMN_NUM));
     }
 }

 //RecentQuery.COLUMN_NAME = 5
 //RecentQuery.COLUMN_NUM = 6
 //RecentQuery.COLUMN_NUM_TYPE = 0
 //RecentQuery.COLUMN_CALL_TYPE = 2

Cuando depuro mi c Cursor, me da estas columnas con estos valores.

[recentNumberType, recentCallCost, recentCallType, recentCallerID, recentDate, recentName, recentNumber, _id]

Name:anthony
Num:(111) 111-1111
NumType:Mobile
CallType:Outgoing

cuando tenga mi c Aparece el cursor en otro teléfono

[recentCallCost, recentCallType, recentCallerID, recentDate, recentName, recentNumber, recentNumberType, _id]

Name:(111) 111-1111
Num:Mobile
NumType:FREE
CallType:1867

Entonces, cuando intento extraer mis datos por índice, obtengo valores diferentes.¿Por qué pasó esto?Ambos teléfonos son Nexus 5 y 4.4.2.

Cualquier idea sobre esto sería genial.¡Gracias!

¿Fue útil?

Solución

Las columnas pueden "cambiar".Por ejemplo, considere este caso.

  • La versión 1 de una aplicación crea la tabla T, con columnas A, C
  • En la versión 2, desea cambiar la estructura de la base de datos.Entonces agregas el B columna a sus scripts de "crear tabla".En dispositivos nuevos, esta tabla tendrá columnas. A, B, C.
  • Sin embargo, en la parte onUpgrade(), simplemente agrega la columna B (a través de ALTER TABLE), y la estructura terminará como A, C, B.

En general, es una mala idea utilizar índices de columnas fijos ("enteros"), a menos que también especifique qué columnas desea (es decir,no usando SELECT *).Usando getColumnIndex() (fuera del circuito) es más seguro.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top