2
respostas

"Crash" no App ao inserir name para Application

Ao inserir a tag name para a Application no manifesto, o app passou a apresentar crash ao buildar:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.cursoandroid.agenda">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        android:name=".app.AgendaApplication">
        <activity android:name=".app.ui.activity.ListaAlunosActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".app.ui.activity.FormularioAlunoActivity" />
<!--            <intent-filter>-->
<!--                <action android:name="android.intent.action.MAIN" />-->

<!--                <category android:name="android.intent.category.LAUNCHER" />-->
<!--            </intent-filter>-->
<!--        </activity>-->
    </application>

</manifest>

Log de Erro:

    --------- beginning of crash
2020-05-12 17:40:46.201 6475-6475/com.cursoandroid.agenda E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.cursoandroid.agenda, PID: 6475
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.cursoandroid.agenda/com.cursoandroid.agenda.app.ui.activity.ListaAlunosActivity}: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3270)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7356)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
     Caused by: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
        at java.util.ArrayList.get(ArrayList.java:437)
        at com.cursoandroid.agenda.app.adapter.ListaAlunosAdapter.getItemId(ListaAlunosAdapter.java:41)
        at android.widget.AdapterView.getItemIdAtPosition(AdapterView.java:815)
        at android.widget.AdapterView.setSelectedPositionInt(AdapterView.java:1236)
        at android.widget.ListView.setAdapter(ListView.java:599)
        at com.cursoandroid.agenda.app.ui.activity.ListaAlunosActivity.configuraAdapter(ListaAlunosActivity.java:115)
        at com.cursoandroid.agenda.app.ui.activity.ListaAlunosActivity.configuraLista(ListaAlunosActivity.java:86)
        at com.cursoandroid.agenda.app.ui.activity.ListaAlunosActivity.onCreate(ListaAlunosActivity.java:34)
        at android.app.Activity.performCreate(Activity.java:7802)
        at android.app.Activity.performCreate(Activity.java:7791)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1299)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016) 
        at android.os.Handler.dispatchMessage(Handler.java:107) 
        at android.os.Looper.loop(Looper.java:214) 
        at android.app.ActivityThread.main(ActivityThread.java:7356) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) 
2 respostas

Complementando... Percebi que ao comentar as duas linhas abaixo no AgendaApplication.java o app abre normal, porém ainda nao identifiquei o que é necessário corrigir:

    private void criaAlunosDeTeste() {
        AlunoDAO dao = new AlunoDAO();
//        dao.salva(new Aluno("Andre", "2313123", "andre@gmail"));
//        dao.salva(new Aluno("Joao", "23243242", "janja@gmail"));

    }

Quando você abre o app, provavelmente está chamando o ListaAlunosActivity. Na linha 115 você chama o configuraAdapter, provavelmente passando uma lista de Aluno vazia.

Quando seu ListaAlunosAdapter recebe essa lista vazia e tenta fazer getItemId (na linha 41) está quebrando com o erro:

java.lang.IndexOutOfBoundsException: Index: 0, Size: 0

Verifique se a lista passada para o Adapter está realmente vazia (ou nula) e veja se seu Adapter não está fazendo algo como listaAlunos.get(indice).