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

Estou com dúvida no curso de Android: Aplicações e armazenamento de dados - Parte 1, no exercício 5 do capítulo Cadastro de alunos.

Nao esta executando, e ao verificar o locat da erro na linha:

listaAluno.setAdapter(adapter);

6 respostas

Qual é a mensagem completa que aparece no logCat?

04-22 09:28:27.870: E/AndroidRuntime(2738): FATAL EXCEPTION: main

04-22 09:28:27.870: E/AndroidRuntime(2738): Process: br.com.caelum.cadastro, PID: 2738

04-22 09:28:27.870: E/AndroidRuntime(2738): java.lang.RuntimeException: Unable to start activity ComponentInfo{br.com.caelum.cadastro/br.com.caelum.cadastro.ListaAlunos}: java.lang.NullPointerException

04-22 09:28:27.870: E/AndroidRuntime(2738): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)

04-22 09:28:27.870: E/AndroidRuntime(2738): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)

04-22 09:28:27.870: E/AndroidRuntime(2738): at android.app.ActivityThread.access$800(ActivityThread.java:135)

04-22 09:28:27.870: E/AndroidRuntime(2738): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)

04-22 09:28:27.870: E/AndroidRuntime(2738): at android.os.Handler.dispatchMessage(Handler.java:102)

04-22 09:28:27.870: E/AndroidRuntime(2738): at android.os.Looper.loop(Looper.java:136)

04-22 09:28:27.870: E/AndroidRuntime(2738): at android.app.ActivityThread.main(ActivityThread.java:5017)

04-22 09:28:27.870: E/AndroidRuntime(2738): at java.lang.reflect.Method.invokeNative(Native Method)

04-22 09:28:27.870: E/AndroidRuntime(2738): at java.lang.reflect.Method.invoke(Method.java:515)

04-22 09:28:27.870: E/AndroidRuntime(2738): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)

04-22 09:28:27.870: E/AndroidRuntime(2738): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)

04-22 09:28:27.870: E/AndroidRuntime(2738): at dalvik.system.NativeStart.main(Native Method)

04-22 09:28:27.870: E/AndroidRuntime(2738): Caused by: java.lang.NullPointerException

04-22 09:28:27.870: E/AndroidRuntime(2738): at br.com.caelum.cadastro.ListaAlunos.onCreate(ListaAlunos.java:38)

04-22 09:28:27.870: E/AndroidRuntime(2738): at android.app.Activity.performCreate(Activity.java:5231)

04-22 09:28:27.870: E/AndroidRuntime(2738): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)

04-22 09:28:27.870: E/AndroidRuntime(2738): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)

04-22 09:28:27.870: E/AndroidRuntime(2738): ... 11 more

Leonardo, preciso da sua listagem_alunos.xml, ListaAlunosActivity. Cola o código por favor e tenta usar o formatador de código aqui do fórum(backticks).

Ok, segue... obs: estou usando um eclipse com ADT recente, que inclusive alterou um pouco a forma de criar os arquivos XML, usando o conceito de fragmento.

arquivo: fragment_listagem_alunos.xml ..............

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ListView        
        android:layout_width="match_parent"
        android:layout_height="fill_parent"
        android:id="@+id/lista" />

</LinearLayout>

.....................................................

arquivo: ListaAlunos.java

package br.com.caelum.cadastro;

import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import android.os.Build;

public class ListaAlunos extends ActionBarActivity {

    private ListView lista;

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

        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction()
                    .add(R.id.container, new PlaceholderFragment()).commit();
        }

        String[] alunos = {"Anderson", "Filipe", "Guilherme"};    

        int layout = android.R.layout.simple_list_item_1;

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, layout, alunos);

        ListView lista = (ListView) findViewById(R.id.lista);
        lista.setAdapter(adapter);    

        lista.setOnItemClickListener(new OnItemClickListener(){
            @Override
            public void onItemClick(AdapterView<?> adapter, View view, int posicao, long id){
                Toast.makeText(ListaAlunos.this, "Posição selecionada "+posicao, Toast.LENGTH_LONG).show();
            }
        });

        lista.setOnItemLongClickListener(new OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> adapter, View view, int posicao, long id) {
                Toast.makeText(ListaAlunos.this, "Item da Posição é "+ adapter.getItemAtPosition(posicao), Toast.LENGTH_LONG).show();

                return true;
            }                        
        });

    }




    /**
     * A placeholder fragment containing a simple view.
     */
    public static class PlaceholderFragment extends Fragment {

        public PlaceholderFragment() {
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_listagem_alunos,
                    container, false);
            return rootView;
        }
    }

}

Oi Leonardo,

Não use fragments nesse exercício, o assunto é abordado em outra seção dos cursos de Android.

Como está o seu layout da activity? O problema é que você está fazendo findViewById (que busca um elemento no layout da activity), mas aparentemente você colocou a listagem de alunos no layout do fragment (e para buscar um elemento do fragment é diferente).

solução!

Ok Francisco, já tinha percebido isso por pesquisas na web, porém por tentar seguir o curso, ainda não tinha procurado verificar como remover a opção de fragmento, mas com seu comentário e apoio ja busquei informação, e alterei a rotina e funcionou normalmente.

Muito obrigado.