Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

Erro: Agenda Keeps stopping

Galera, não consigo executar a app. Aparece a mensagem "Agenda Keeps stopping"

ListaAlunosActivity:


ublic class ListaAlunosActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_lista_alunos);

        AlunoDAO dao = new AlunoDAO(this);
        List<Aluno> alunos = dao.buscaAlunos();
        dao.close(); // fechando a conexao com o banco


        ListView listaAlunos = (ListView) findViewById(R.id.lista_alunos);
        ArrayAdapter<Aluno> adapter = new ArrayAdapter<Aluno>(this, android.R.layout.simple_list_item_1, alunos);
        listaAlunos.setAdapter(adapter);

        Button novoAluno = (Button) findViewById(R.id.novo_aluno);
        novoAluno.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent vaiParaOFormulario = new Intent(ListaAlunosActivity.this, FormularioActivity.class);
                startActivity(vaiParaOFormulario);

            }
        });
    }

}

FormularioActivity:




public class FormularioActivity extends AppCompatActivity {

    private FormularioHelper helper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_formulario);


        helper = new FormularioHelper(this);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_formulario, menu);
        return super.onCreateOptionsMenu(menu);

    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_formulario_ok:
                Aluno aluno = helper.pegaAluno();
                AlunoDAO alunoDAO = new AlunoDAO(this);
                alunoDAO.insere(aluno);
                alunoDAO.close(); //fechando a conexao com o banco

                Toast.makeText(FormularioActivity.this, "Aluno " + aluno.getNome() +" salvo", Toast.LENGTH_SHORT).show();
                finish();
                break;
        }
        return super.onOptionsItemSelected(item);
    }
}

```

7 respostas

Olá Geovane, tudo bem?

Estive dando uma olhada no seu código para ver possíveis causas dessa exception, tente verificar essa parte do seu código no método onCreate do AlunoDao:

 String sql = "CREATE TABLE Alunos (id INTEGER PRIMARY KEY, nome TEXT NOT NULL, endereco TEXT, telefone TEXT, site TEXT, nota REAL;";

Me parece que está faltando um parênteses aqui no fim, uma sugestão, ao executar o aplicativo tente clicar na aba Android Monitor que fica no canto inferior do Android Studio, lá nós teremos informações do porque essa exception está ocorrendo, caso essa correção do trecho acima não seja suficiente para o aplicativo funcionar, vou pedir para passar o conteúdo do Android Monitor para que possamos ver o que está causando a exception.

Abs

Certo, Rafael. Acredito que o problema era esse mesmo. Porém to fazendo a inserção e não está salvando no BD. Assim, vou colocar o que tu pediu:

08-14 16:50:53.879 2362-2362/com.example.gd.agenda E/SQLiteLog: (1) no such table: Aluno
08-14 16:50:53.880 2362-2362/com.example.gefsdane.agenda E/SQLiteDatabase: Error inserting nome=Jeus dnota=5.0 endereco=Hez site=cpg.com.br telefone=4f5454
        android.database.sqlite.SQLiteException: no such table: Aluno (code 1): , while compiling: INSERT INTO Aluno(nome,nota,endereco,site,telefone) VALUES (?,?,?,?,?)
    at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
    at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
    at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
    at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
    at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
    at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
    at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1472)
    at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1343)
    at com.example.geovane.agenda.dao.AlunoDAO.insere(AlunoDAO.java:52)
    at com.example.geovane.agenda.FormularioActivity.onOptionsItemSelected(FormularioActivity.java:50)
    at android.app.Activity.onMenuItemSelected(Activity.java:3204)
    at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:408)
    at android.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:195)
    at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:113)
    at android.support.v7.app.AppCompatDelegateImplV9.onMenuItemSelected(AppCompatDelegateImplV9.java:679)
    at android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:822)
    at android.support.v7.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:156)
    at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:969)
    at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:959)
    at android.support.v7.widget.ActionMenuView.invokeItem(ActionMenuView.java:623)
    at android.support.v7.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:154)
    at android.view.View.performClick(View.java:5637)
    at android.view.View$PerformClick.run(View.java:22429)
    at android.os.Handler.handleCallback(Handler.java:751)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6119)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
    08-14 16:50:53.907 2482-2990/com.google.android.gms W/Conscrypt: Could not set socket write timeout: null

Certo, Rafael. Acredito que o problema era esse mesmo. Porém to fazendo a inserção e não está salvando no BD. Assim, vou colocar o que tu pediu:

08-14 16:50:53.879 2362-2362/com.example.geovdfsane.agenda E/SQLiteLog: (1) no such table: Aluno
08-14 16:50:53.880 2362-2362/com.example.geofsfdsvane.agenda E/SQLiteDatabase: Error inserting nome=Paulo nota=5.0 endereco=Hz Men site=cpg.com.br telefone=48123efd    android.database.sqlite.SQLiteException: no such table: Aluno (code 1): , while compiling: INSERT INTO Aluno(nome,nota,endereco,site,telefone) VALUES (?,?,?,?,?)
    at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
    at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
    at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
    at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
    at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
    at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
    at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1472)
    at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1343)
    at com.example.geovane.agenda.dao.AlunoDAO.insere(AlunoDAO.java:52)
    at com.example.geovane.agenda.FormularioActivity.onOptionsItemSelected(FormularioActivity.java:50)
    at android.app.Activity.onMenuItemSelected(Activity.java:3204)
    at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:408)
    at android.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:195)
    at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:113)
    at android.support.v7.app.AppCompatDelegateImplV9.onMenuItemSelected(AppCompatDelegateImplV9.java:679)
    at android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:822)
    at android.support.v7.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:156)
    at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:969)
    at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:959)
    at android.support.v7.widget.ActionMenuView.invokeItem(ActionMenuView.java:623)
    at android.support.v7.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:154)
    at android.view.View.performClick(View.java:5637)
    at android.view.View$PerformClick.run(View.java:22429)
    at android.os.Handler.handleCallback(Handler.java:751)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6119)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
    08-14 16:50:53.907 2482-2990/com.google.android.gms W/Conscrypt: Could not set socket write timeout: null
solução!

Olá Geovane,

Veja que temos um trecho indicando:

08-14 16:53:46.819 2362-2362/com.example.geovane.agenda E/SQLiteLog: (1) no such table: Aluno

Ao analisar o trecho do código no AlunoDao, temos a criação da tabela Alunos, mas no método insere da classe AlunoDao nós temos:

db.insert("Aluno","null",dados);

Tente trocar Aluno pelo nome da tabela que foi criada, Alunos

OK, certo parece que era isso. valeu.

Agora, tô com outra dúvida: O que é o Android Monitor? Como vc conseguiu encontrar esse erro diante de tantas linhas? Devo sempre dá uma olhada lá? Mas como procurar?

O Android Monitor seria uma ferramenta de debugging da nossa aplicação, onde podemos ver os logs e entender certos comportamentos. Exato, sempre que nossa aplicação se comporta de uma forma inesperada é importante que nós analisemos os arquivos de log porque lá teremos as informações das exceptions.

Normalmente as informações de exceptions estão deslocadas para a direita e destacadas na cor vermelha.