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
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