Pergunta

Eu sou um novato no Android, trabalhando nos adaptadores de lista agora. Eu sei que algum tipo de adaptadores de lista precisa de coluna _ID para processar os dados. Eu forneço uma coluna _id, mas não consegui fazer funcionar. Eu sigo um exemplo no bloco de notas, então aqui está o meu código:

Eu crio o banco de dados por esta afirmação:

private static final String DB_TABLE = "radios";
public static final String KEY_NAME = "name";
public static final String KEY_URL = "url";
public static final String KEY_ROWID = "_id";

String final estática privada db_create = "Criar tabela" + db_table + "(" + key_rowid + "Inteiro AutoinCrement da chave primária inteira," + key_name + "texto não nulo" + key_url + "texto não nulo);";

Usando uma classe dbhelper:

 private static class DBHelper extends SQLiteOpenHelper {

    DBHelper(Context context) {
        super(context, DB_NAME, null, DB_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

        db.execSQL(DB_CREATE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
                + newVersion + ", which will destroy all old data");
        db.execSQL("DROP TABLE IF EXISTS " + DB_TABLE);
        onCreate(db);
    }
}

Aqui eu recebo todos os registros em DB:

public Cursor getAllRadios() {
    return db.query(DB_TABLE, new String[] {KEY_ROWID,KEY_NAME,KEY_URL}, null, null, null, null, null);
}

E meu adaptador:

String[] from = new String[] { DBAdapter.KEY_NAME };
    int[] to = new int[] { R.id.text1 };

    try{
     SimpleCursorAdapter radios = new SimpleCursorAdapter(this, R.layout.list_item, cursor , from, to); 
     setListAdapter(radios);
    }
    catch(Exception e){
     e.printStackTrace();
    }

Eu não consegui encontrar nenhum problema, mas ainda entendo nenhuma coluna como "_id" erro. Alguma ideia?

Foi útil?

Solução

Hmm, seu código SQL para criar a tabela parece bem para mim (mesmo que você possa incluir seus nomes de colunas nas cotações apenas com certeza). Mas talvez você já tenha uma tabela antiga existente que não é atualizada? Só para ter certeza: incremento db_version e execute novamente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top