Stai tentando di recuperare un elemento sull'indice 2 ma questo indice in realtà non esiste (la dimensione del cursore è 2, quindi gli indici sono 0,1).
Cambia il tuo ciclo:
if (result != null && result.moveToFirst()){
do {
Post post = new Post();
post.setPostId(result.getInt(0));
posts.add(post);
....
} while (result.moveToNext());
}
Ora dovrebbe funzionare correttamente.
Nota: Non dimenticare di chiamare moveToFirst()
metodo che sposta Cursor nel primo record (implicitamente posizionato prima della prima riga) e lo prepara per la lettura. Questo è anche un metodo utile per verificare se il cursore è valido o meno.
Nota 2: Non utilizzare indici di colonna, puoi semplicemente fare un errore nel conteggio. Invece di utilizzare i nomi delle colonne, questo approccio è generalmente consigliato e.q. cursor.getColumnIndex("<columnName>")