3
respostas

Criar base já populada

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

3 respostas

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:

  • No método onCreate instancie o Dao e chame o método que será responsável pela inserção dos valores no banco
  • Posteriormente no XML da Activity insira um TextView e pegue seu ID no método onCreate.
  • Adicione um Listener para essa View e dentro do Listener acesse um método do Dao para fazer consulta a esse valor inserido.

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