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

Dúvida no Ex. 3 da Aula 3 - LayoutInflater para melhorar nossa apresentação

O Agenda parou, acho que meus dados estão em branco,

como posso resolver?


02-11 15:38:11.120: E/AndroidRuntime(911): FATAL EXCEPTION: main
02-11 15:38:11.120: E/AndroidRuntime(911): Process: br.com.caelum.cadastro, PID: 911
02-11 15:38:11.120: E/AndroidRuntime(911): java.lang.RuntimeException: Unable to start activity ComponentInfo{br.com.caelum.cadastro/br.com.caelum.cadastro.ListaAlunosActivity}: java.lang.NullPointerException
02-11 15:38:11.120: E/AndroidRuntime(911):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184)
02-11 15:38:11.120: E/AndroidRuntime(911):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
02-11 15:38:11.120: E/AndroidRuntime(911):     at android.app.ActivityThread.access$800(ActivityThread.java:135)
02-11 15:38:11.120: E/AndroidRuntime(911):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
02-11 15:38:11.120: E/AndroidRuntime(911):     at android.os.Handler.dispatchMessage(Handler.java:102)
02-11 15:38:11.120: E/AndroidRuntime(911):     at android.os.Looper.loop(Looper.java:136)
02-11 15:38:11.120: E/AndroidRuntime(911):     at android.app.ActivityThread.main(ActivityThread.java:5001)
02-11 15:38:11.120: E/AndroidRuntime(911):     at java.lang.reflect.Method.invokeNative(Native Method)
02-11 15:38:11.120: E/AndroidRuntime(911):     at java.lang.reflect.Method.invoke(Method.java:515)
02-11 15:38:11.120: E/AndroidRuntime(911):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
02-11 15:38:11.120: E/AndroidRuntime(911):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
02-11 15:38:11.120: E/AndroidRuntime(911):     at dalvik.system.NativeStart.main(Native Method)
02-11 15:38:11.120: E/AndroidRuntime(911): Caused by: java.lang.NullPointerException
02-11 15:38:11.120: E/AndroidRuntime(911):     at android.app.Activity.registerForContextMenu(Activity.java:2911)
02-11 15:38:11.120: E/AndroidRuntime(911):     at br.com.caelum.cadastro.ListaAlunosActivity.onCreate(ListaAlunosActivity.java:37)
02-11 15:38:11.120: E/AndroidRuntime(911):     at android.app.Activity.performCreate(Activity.java:5231)
02-11 15:38:11.120: E/AndroidRuntime(911):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
02-11 15:38:11.120: E/AndroidRuntime(911):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)
02-11 15:38:11.120: E/AndroidRuntime(911):     ... 11 more
4 respostas

Oi Douglas, tudo bem ?

Pode postar o código da sua activity aqui para vermos por favor !

Abraço

Não estou conseguindo seguir em diante no curso , devido esse erro, pois outros exercícios depende do funcionamento.

public class ListaAlunosActivity extends Activity{

    private ListView listViewAlunos;
    private Aluno alunoSelecionado;

    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.item);

        //fazendo a ponte entre XML e Java, e o devido Cast
        listViewAlunos= (ListView) findViewById(R.id.lista);
        registerForContextMenu(listViewAlunos);


        Toast.makeText(ListaAlunosActivity.this,"Iniciou o aplicativo", Toast.LENGTH_LONG).show();


        listViewAlunos.setOnItemClickListener( new OnItemClickListener() 
        {

            @Override
            public void onItemClick(AdapterView<?> adapter, View view, int posicao,    long id) {

            Aluno alunoParaSerAlterado = (Aluno) adapter.getItemAtPosition(posicao);

            Intent edicao = new Intent(ListaAlunosActivity.this,FormularioActivity.class);
            //Enviando pelo PutExtra
            edicao.putExtra(Extras.ALUNO_SELECIONADO,alunoParaSerAlterado);
            startActivity(edicao);    


            }
        });

        listViewAlunos.setOnItemLongClickListener(new OnItemLongClickListener() 
        {    

            @Override
            public boolean onItemLongClick(AdapterView<?> adapter, View view, int posicao,    long id) 
            {
                //Toast.makeText(ListaAlunosActivity.this, "Aluno clicado: "+alunos[posicao], Toast.LENGTH_SHORT).show();

                alunoSelecionado = (Aluno) adapter.getItemAtPosition(posicao); 
                return false;                
            }
        });
    } // onCreate


    private void carregaLista(){
        AlunoDAO alunoDAO = new AlunoDAO(this);
        //pegar alunos do banco ou seja do DAO
        //getLista() tem um retorno do tipo List<Aluno> então temos que criar a variável desse tipo para receber o retorno

        List<Aluno> listAlunos=alunoDAO.getLista();

        if (listAlunos.isEmpty())
            Toast.makeText(ListaAlunosActivity.this,"Nenhum aluno cadastrado", Toast.LENGTH_LONG).show();


        //Criando o adpter para passar o array do Java para android
        //ArrayAdapter<Aluno> adapter = new ArrayAdapter<Aluno>(this,android.R.layout.simple_list_item_1, listAlunos);
        // Associar  o adpter criado para o LIstView

        ListaAlunosAdapter adapter = new ListaAlunosAdapter(this,listAlunos);

        listViewAlunos.setAdapter(adapter);


    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
            this.carregaLista();
    }


    //Importando Menu XML
    @Override
    public boolean onCreateOptionsMenu(Menu menu) 
    {
        getMenuInflater().inflate(R.menu.menu_lista_alunos, menu);    
        return super.onCreateOptionsMenu(menu);
    }

    //Comportamento ao clicalr

    @Override
    public boolean onOptionsItemSelected(MenuItem item)

    {
        switch (item.getItemId()) 
        {
            case R.id.novo:
            Intent irParaFormulario = new Intent(this,FormularioActivity.class);
            startActivity(irParaFormulario);

            return false;

            case R.id.mapa:
                Intent intentMapa = new Intent(Intent.ACTION_VIEW);
                intentMapa.setData(Uri.parse("geo:0,0?z=14&q="+alunoSelecionado.getEndereco()));
                startActivity(intentMapa);

                return false;

            default:

        }
        return super.onOptionsItemSelected(item);
    }

// Menu suspenso

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {
        // criando menu programaticamente
        // Não esquecer de registrar a lista para ter um menu de contexto


         MenuItem ligar = menu.add(0,0,0,"Ligar");
        // Intent intentLigar = new Intent(Intent.ACTION_CALL);
         Intent intentLigar = new Intent(Intent.ACTION_DIAL);
         intentLigar.setData(Uri.parse("tel:"+alunoSelecionado.getTelefone()));
         ligar.setIntent(intentLigar);


        MenuItem SMS = menu.add("Enviar SMS");

        Intent intentSMS = new Intent(Intent.ACTION_VIEW);
        intentSMS.setData(Uri.parse("sms:"+alunoSelecionado.getTelefone()));
        intentSMS.putExtra("sms_body"," Olá sou o Douglas Raphael, retornarei a ligação assim que possível");
        SMS.setIntent(intentSMS);

    //    MenuItem mapa = menu.add("Achar no Mapa");
    /*    mapa.setOnMenuItemClickListener(new OnMenuItemClickListener() {

            @Override
            public boolean onMenuItemClick(MenuItem item) {
                Intent intentMapa = new Intent(Intent.ACTION_VIEW); intentMapa.setData(Uri.parse("geo:0,0?z=14&q="+alunoSelecionado.getEndereco())); 
                setIntent(intentMapa); 
                startActivity(intentMapa);
                return false;
            }
        });
        */

        MenuItem mapa = menu.add("Achar no Mapa");
        Intent intentMapa = new Intent(Intent.ACTION_VIEW); intentMapa.setData(Uri.parse("geo:0,0?z=14&q="+alunoSelecionado.getEndereco())); 
        mapa.setIntent(intentMapa); 



        MenuItem site = menu.add("Navegar no site");
        Intent intentSite = new Intent(Intent.ACTION_VIEW);
        String http = alunoSelecionado.getSite().startsWith("http://")?"":"http://";
        intentSite.setData(Uri.parse(http+alunoSelecionado.getSite()));
        site.setIntent(intentSite);





        MenuItem deletar = menu.add("Deletar");
        deletar.setOnMenuItemClickListener(new OnMenuItemClickListener() {

            @Override
            public boolean onMenuItemClick(MenuItem item) {
                AlunoDAO dao = new AlunoDAO(ListaAlunosActivity.this);
                dao.deletar(alunoSelecionado);
                dao.close();
                carregaLista();
                return false;
            }
        });

        MenuItem email = menu.add(0,5,0, "Enviar E-mail");
        Intent intentEmail = new Intent(Intent.ACTION_SEND);
        intentEmail.setType("message/rfc822"); 
        intentEmail.putExtra(Intent.EXTRA_EMAIL,
             new String[] { "caelum@caelum.com.br" });
        intentEmail.putExtra(Intent.EXTRA_SUBJECT, "Elogios do curso de android");
        intentEmail.putExtra(Intent.EXTRA_TEXT, "Este curso é ótimo!!!");
        email.setIntent(intentEmail);


            MenuItem emailOP = menu.add(0,5,0, "Enviar E-mail ,...");
        email.setOnMenuItemClickListener(new OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                Intent intentEmail = new Intent(Intent.ACTION_SEND);
                intentEmail.setType("message/rfc822"); 
                intentEmail.putExtra(Intent.EXTRA_EMAIL,
                     new String[] { "caelum@caelum.com.br" });
                intentEmail.putExtra(Intent.EXTRA_SUBJECT, "Elogios do curso de android");
                intentEmail.putExtra(Intent.EXTRA_TEXT, "Este curso é ótimo!!!");

                startActivity(Intent.createChooser(intentEmail, "Selecione a sua aplicação de email!"));
                return false;
            }  
        });

        /*
        MenuItem compartilhar = menu.add(0,5,0, "Compartilhar...");
        Intent intent = new Intent(Intent.ACTION_SEND);
        intent.setType("text/plain");
        intent.putExtra(Intent.EXTRA_SUBJECT, "assunto do que será compartilhado");
        intent.putExtra(Intent.EXTRA_TEXT, "texto do que será compartilhado");
        startActivity(Intent.createChooser(intent, "Escolha como compartilhar"));
    */

        super.onCreateContextMenu(menu, v, menuInfo);
    }



}
public class ListaAlunosAdapter extends BaseAdapter {

    private final List<Aluno> listAlunos;
    private Activity activity;

    public ListaAlunosAdapter(Activity activity,List<Aluno> listAlunos) {
        this.listAlunos = listAlunos;
        this.activity=activity;        
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return listAlunos.size();
    }

    @Override
    public Object getItem(int posicao) {

        return listAlunos.get(posicao);
    }

    @Override
    public long getItemId(int posicao) {
        // TODO Auto-generated method stub
        return listAlunos.get(posicao).getId();
    }

    @Override
    public View getView(int posicao, View arg1, ViewGroup arg2) {

        Aluno aluno = listAlunos.get(posicao);
        View view = activity.getLayoutInflater().inflate(br.com.caelum.cadastro.R.layout.item, null);

        if (posicao % 2 == 0) {
            view.setBackgroundColor(activity.getResources().
                getColor(br.com.caelum.cadastro.R.color.linha_par));
        } 



        Bitmap bm; 

        TextView nome = (TextView) view.findViewById(br.com.caelum.cadastro.R.id.nome);
        nome.setText(aluno.toString());



        if (aluno.getCaminhoFoto() != null) {
            bm = BitmapFactory.decodeFile(aluno.getCaminhoFoto());
        } 
        else 
        {
            bm = BitmapFactory.decodeResource(activity.getResources(),br.com.caelum.cadastro.R.drawable.ic_no_image);
        }

        bm = Bitmap.createScaledBitmap(bm, 100, 100, true);

        ImageView foto =(ImageView) view.findViewById(br.com.caelum.cadastro.R.id.foto);
        foto.setImageBitmap(bm);
        return view;
    }

}
solução!

O Erro estava em

protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);

    // errado
    //     setContentView(R.layout.item);
    //correto
        setContentView(R.layout.listagem_alunos);

Na verdade é o mesmo layout, não havia necessidade de alterar, apenas foi inflado por outro.

Erro na mesma aula:

"LayoutInflater.from" Cannot resolve simbol 'from'

O que faço com essa mensagem?

 @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Torneios torneio= torneios.get(position);

        LayoutInflater inflater = new LayoutInflater.from(context);
        View view =  inflater.inflate(R.layout.list_item, null);

        return view;
    }

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software