Gostaria de saber como eu faço pra preencher uma tabela assim que a aplicação é instalada. Minha intenção é ter uma base onde nada é alterado, excluido ou inserido, apenas consultado. E na abertura do app, gostaria de consultar os dados dessa tabela
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Gostaria de saber como eu faço pra preencher uma tabela assim que a aplicação é instalada. Minha intenção é ter uma base onde nada é alterado, excluido ou inserido, apenas consultado. E na abertura do app, gostaria de consultar os dados dessa tabela
Olá Lucas, tudo bem?
Se entendi corretamente, a ideia é que esse banco já tenha valores preenchidos previamente pelo desenvolvedor e na Activity ocorra somente a busca de tais valores, seria isso mesmo?
Nesse caso, acredito que uma ideia seria a seguinte:
Espero que essa informação ajude!
Abraços
Olá Rafael. Tudo bem, e você? Obrigado pela resposta! Foi isso o que tentei fazer. Porém, o aplicativo abre sem mostrar nenhum resultado:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_summary);
insertSong();
listaCanticos = (ListView) findViewById(R.id.lista_canticos);
listaCanticos.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> lista, View item, int position, long id) {
Cantico cantico = (Cantico) listaCanticos.getItemAtPosition(position);
Intent intentGoToLyrics = new Intent(SummaryActivity.this, LyricsActivity.class);
intentGoToLyrics.putExtra("cantico", cantico);
startActivity(intentGoToLyrics);
}
});
}
private void insertSong(){
CanticoDAO dao = new CanticoDAO(this);
dao.insertCanticos();
dao.close();
finish();
}
private void loadSummary(){
CanticoDAO dao = new CanticoDAO(this);
List<Cantico> canticos = dao.selectAll();
dao.close();
ArrayAdapter<Cantico> adapter = new ArrayAdapter<Cantico>(this, android.R.layout.simple_list_item_1, canticos);
listaCanticos.setAdapter(adapter);
}
@Override
protected void onResume() {
super.onResume();
loadSummary();
}
public void insertCanticos(){
SQLiteDatabase db = getWritableDatabase();
ContentValues dados = new ContentValues();
//dados.put("Id", Long.valueOf("1"));
dados.put("Number", Long.valueOf("1"));
dados.put("Title", "title of song");
dados.put("Lyrics", "song");
dados.put("Favorite", "false");
db.insert("Canticos", null, dados);
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_summary"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="br.com.ippontadareia.cancioneiroippa.SummaryActivity"
android:orientation="vertical">
<ListView
android:id="@+id/lista_canticos"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</RelativeLayout>
Por algum motivo, o método onResume() não é chamado, e consulta inicial não é preenchida.
Olá Lucas,
Tinha pensado da seguinte forma, só utilizaria o método onCreate e nele chamaria o método para inserção dos dados através do dao. Para não criar múltiplos valores a cada vez que entrar na aplicação, pensei em ter um método no dao que fizesse a consulta se existe algum valor inserido. Se existir valores inseridos o método insere não deverá ser executado, seria algo como:
onCreate
CanticoDAO dao = new CanticoDAO(this);
if (dao.count() == 0) {
dao.insertCanticos();
}
Dao
public int count() {
SQLiteDatabase db = this.getWritableDatabase();
String sql = "SELECT id FROM "+TABLE_NAME;
int recordCount = db.rawQuery(sql, null).getCount();
db.close();
return recordCount;
}
Dessa forma, se o retorno for 0 quer dizer que não existe ainda nenhum dado inserido, do contrário caso o valor não seja 0, é porque os dados já foram inseridos na tabela e não devem ser inseridos novamente.
Espero que essa informação ajude!
Abs