Error with the Spinner Book

Asked

Viewed 47 times

0

I passed on to Class that he sends me as soon as I click on the bug, but I can’t identify it. Can anyone help me? Sorry for the inconvenience, I’m new on Android and the site, so I don’t know how they prefer that I post.

package com.br.activity;

import com.br.adapter.spinner.DistribuidoraSpinnerAdapter;
import com.br.adapter.spinner.LivroSpinnerAdapter;
import com.br.controller.DistribuidoraCtrl;
import com.br.controller.LivroCtrl;
import com.br.dbHelper.ConexaoSQLite;
import com.br.model.Distribuidora;
import com.br.model.Livro;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.Toast;

public class AlteraDistribuidoraActivity extends Activity {

    private Button btnADAtualizar; // Botao para salvar as alterações
    private Spinner spnADLivro;// Spinner contendo os livros
    private Spinner spnADDistribuidora;// Spinner contendo as distribuidoras
    private LivroCtrl livroCtrl;// Controller do livro
    private DistribuidoraCtrl distribuidoraCtrl;// Controller da distribuidora

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

        // Inicializo os controllers
        livroCtrl = new LivroCtrl(ConexaoSQLite.getInstancia(AlteraDistribuidoraActivity.this));
        distribuidoraCtrl = new DistribuidoraCtrl(ConexaoSQLite.getInstancia(AlteraDistribuidoraActivity.this));

        // Crio o botão Atualizar
        this.btnADAtualizar = (Button) findViewById(R.id.btnADAtualizar);

        // Crio o spinner Livro
        this.spnADLivro = (Spinner) findViewById(R.id.spnADLivro);

        // Crio o spinner Distribuidora
        this.spnADDistribuidora = (Spinner) findViewById(R.id.spnADDistribuidora);

        // Crio o adpater para adicionar a lista de Livros ao spinner
        final LivroSpinnerAdapter livroSpinAdapter = new LivroSpinnerAdapter(this, android.R.layout.simple_spinner_item, this.livroCtrl.getListaLivroCtrl());

        // Crio o adpater para adicionar a lista de Distribuidores ao spinner
        final DistribuidoraSpinnerAdapter distribuidoraSpinAdapter = new DistribuidoraSpinnerAdapter(this, android.R.layout.simple_spinner_item, this.distribuidoraCtrl.getListaDistribuidoraCtrl());

        // Adiciono um layout ao menu de dropdown do spinner
        livroSpinAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        // Adiciono um layout ao menu de dropdown do spinner
        distribuidoraSpinAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        // Seto o adapter ao spinner
        this.spnADDistribuidora.setAdapter(livroSpinAdapter);

        // Seto o adapter ao spinner
        this.spnADDistribuidora.setAdapter(distribuidoraSpinAdapter);

        // Adiciono listenner ao botao atualizar
        this.btnADAtualizar.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                // Crio um Livro (o selecionado no spinner)
                Livro livros = (Livro) spnADLivro.getSelectedItem();

                // Crio uma Distribuidora (o selecionado no spinner)
                Distribuidora distribuidora = (Distribuidora) spnADDistribuidora.getSelectedItem();

                // Atualizo a Distribuidora do Livro
                livros.setLivCodigo(distribuidora.getDisCodigo());

                // Salvo o Livro atualizado com o novo Distribuidora
                if (livroCtrl.updateLivroCtrl(livros)) {

                    Toast.makeText(AlteraDistribuidoraActivity.this, "Livro " + livros.getLivNome() + " agora é distribuido por " + distribuidora.getDisNome(), Toast.LENGTH_LONG).show();
                } else {

                    // Não consegui atualizar Distribuidora
                    Toast.makeText(AlteraDistribuidoraActivity.this, "Erro ao atualizar distribuidor!", Toast.LENGTH_LONG).show();
                }

            }
        });

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // É o que acrescenta item no Menu.
        getMenuInflater().inflate(R.menu.altera_distribuidora, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

Error:

10-30 13:59:26.184 2628-2628/com.br.Activity E/Androhidrountime: FATAL EXCEPTION: main Process: com.br.Activity, PID: 2628 java.lang.Nullpointerexception: Attempt to invoke virtual method 'void com.br.model.Livro.setLivCodigo(long)' on a null Object Reference at com.br.Activity.Alteradistribuidoraactivity$1.onClick(Alteradistribuidoraactivity.java:77) 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)**

  • Error indicates that on the line livros.setLivCodigo(distribuidora.getDisCodigo()); the livros is null and so can not call the method setLivCodigo. This happens because there is nothing selected on Spinner, and when it happens returns null.

  • And how do I fix it? Isac

  • The simplest way is to even test if you have one selected with if (livros != null) { now may not do what you want, which already depends on the specific purpose of the application

  • It has a method by passing if (books != null), but the specific objective is the spinner to pull the Book list from the bank

  • Isac, is there somewhere that you can help me directly with yourself? I’m already with my head exploding!

  • The problem is that your button btnADAtualizar is using Spinner livros without being sure that the user has selected something in it! So the right thing (in my optics that I’m not inside of what your application intends to do) is to do nothing! And for that reason I suggested putting inside the onClick the test to know if there was selection.

Show 1 more comment
No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.