خرید بک لینک

Vote count: 0

There is the SQLiteCreate that extends SQLiteOpenHelper to create the database and SQLiteController to control the values. On the debug i saw that the variable "banco" in the SQLiteController constructor is getting NULL when I create an object of SQLiteController.

SQLiteCreate class:

package din.uem.ajudaamao.database;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class SQLiteCreate extends SQLiteOpenHelper {

    public static final int VERSAO = 1;

    public static final String NOME_BANCO = "database.db";
    public static final String TABELA = "contatos";
    public static final String ID = "_id";
    public static final String NOME = "nome";
    public static final String NUMERO = "numero";
    public static final String MENSAGEM = "mensagem";
    public static final String TIPO = "tipo";

    public SQLiteCreate(Context context) {
        super(context, NOME_BANCO, null, VERSAO);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String sql = "CREATE TABLE " + TABELA + " ("
                + ID        + " INTEGER PRIMARY KEY AUTOINCREMENT, "
                + NOME      + " TEXT, "
                + NUMERO    + " TEXT, "
                + MENSAGEM  + " TEXT, "
                + TIPO      + " TEXT)";
        db.execSQL(sql);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABELA);
        onCreate(db);
    }

}

SQLiteController class:

package din.uem.ajudaamao.database;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import din.uem.ajudaamao.classes.Contato;

public class SQLiteController {

    private SQLiteDatabase db;
    private SQLiteCreate banco;

    public SQLiteController(Context context) {
        banco = new SQLiteCreate(context);
    }

    public String insereDado(Contato contato) {

        db = banco.getWritableDatabase();
        ContentValues valores = new ContentValues();
        valores.put(SQLiteCreate.NOME, contato.name);
        valores.put(SQLiteCreate.MENSAGEM, contato.message);
        valores.put(SQLiteCreate.NUMERO, contato.phoneNumber);
        valores.put(SQLiteCreate.TIPO, contato.getType());

        long resultado = db.insert(SQLiteCreate.TABELA, null, valores);
        db.close();

        if (resultado == -1)
            retu "Erro ao inserir registro";
        else
            retu "Registro inserido com sucesso";

}

    public Cursor carregaDados() { // NOT IN USE SO FAR
        Cursor cursor;
        String[] campos = {SQLiteCreate.ID, SQLiteCreate.NOME};
        db = banco.getReadableDatabase();
        cursor = db.query(SQLiteCreate.TABELA, campos, null, null, null, null, null, null);

        if (cursor != null)
            cursor.moveToFirst();
        db.close();

        retu cursor;
    }

}

Class where I try to create the object (in the addContato method)

package din.uem.ajudaamao.activities;

imports...

public class ContatosActivity extends AppCompatActivity {

TabHost host;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_contatos);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setTitle("Contatos");

// -------------------------------- TAB CONFIG ---------------------------------------------- //
    host = (TabHost)findViewById(R.id.tabHost);
    host.setup();

    // Tab 1
    TabHost.TabSpec spec = host.newTabSpec("Emergência");
    spec.setContent(R.id.tabEmergencia);
    spec.setIndicator("Emergência");

    host.addTab(spec);

    //Tab 2
    spec = host.newTabSpec("Atenção");
    spec.setContent(R.id.tabAtencao);
    spec.setIndicator("Urgente");
    host.addTab(spec);

    //Tab 3
    spec = host.newTabSpec("Não Urgente");
    spec.setContent(R.id.tabNaoUrgente);
    spec.setIndicator("Não Urgente");
    host.addTab(spec);
// ------------------------------ TAB CONFIG END -------------------------------------------- //

// --------------------------- setOnClickListener --------------------------------------------//

    final ListView lvContatosEmergencia = (ListView)findViewById(R.id.lvContatosEmergencia);
    lvContatosEmergencia.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Intent itContatoInfo = new Intent(ContatosActivity.this, ContatoInfo.class);
            itContatoInfo.putExtra("position", position);
            itContatoInfo.putExtra("type", Contato.EMERGENCIA);
            startActivity(itContatoInfo);
        }
    });

    final ListView lvContatosAtencao = (ListView)findViewById(R.id.lvContatosAtencao);
    lvContatosAtencao.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Intent itContatoInfo = new Intent(ContatosActivity.this, ContatoInfo.class);
            itContatoInfo.putExtra("position", position);
            itContatoInfo.putExtra("type", Contato.ATENCAO);
            startActivity(itContatoInfo);
        }
    });

    final ListView lvContatosNaoUrgente = (ListView)findViewById(R.id.lvContatosNaoUrgente);
    lvContatosNaoUrgente.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Intent itContatoInfo = new Intent(ContatosActivity.this, ContatoInfo.class);
            itContatoInfo.putExtra("position", position);
            itContatoInfo.putExtra("type", Contato.NAO_URGENTE);
            startActivity(itContatoInfo);
        }
    });
// --------------------------- END OnClickListener -------------------------------------------//

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.contatos_menu, menu);
    retu true;
}

public void addContato(Contato contato, int tipo) {
    if (tipo == Contato.EMERGENCIA) {
        EmergenciaFragment fragEmergencia = new EmergenciaFragment();
        fragEmergencia.addContato(contato);
    }
    else if(tipo == Contato.ATENCAO) {
        AtencaoFragment.addContato(contato);
    }
    else if(tipo == Contato.NAO_URGENTE) {
        NaoUrgenteFragment.addContato(contato);
    }
    SQLiteController controller = new SQLiteController(this);
    String resultado = controller.insereDado(contato);
}

public void showAddContatoDialog(final int tipo) {
    final Dialog dbAddContato = new Dialog(this);
    dbAddContato.setContentView(R.layout.dialogbox_add_contato);
    dbAddContato.setTitle("Adicionar Contato");

    Button dbbtAdd = (Button)dbAddContato.findViewById(R.id.btAdicionar);
    Button dbbtCancelar = (Button)dbAddContato.findViewById(R.id.btCancelar);

    dbbtCancelar.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            dbAddContato.cancel();
        }
    });
    dbbtAdd.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Contato contato = new Contato(tipo);

            EditText etNome = (EditText) dbAddContato.findViewById(R.id.etNome);
            EditText etNumero = (EditText) dbAddContato.findViewById(R.id.etNumero);
            EditText etDDD = (EditText) dbAddContato.findViewById(R.id.etDDD);
            EditText etMensagem = (EditText) dbAddContato.findViewById(R.id.etMensagem);

            if (etNome.getText().toString().isEmpty() || etDDD.getText().toString().isEmpty() || etNumero.getText().toString().isEmpty() || etMensagem.getText().toString().isEmpty()) {
                Toast.makeText(getApplicationContext(), "Todos os campos devem ser preenchidos", Toast.LENGTH_SHORT).show();
            } else {
                contato.name = etNome.getText().toString();
                contato.phoneNumber = etNumero.getText().toString();
                contato.message = etMensagem.getText().toString();

                addContato(contato, tipo);
                Toast.makeText(getApplicationContext(), "Contato Adicionardo", Toast.LENGTH_SHORT).show();

                dbAddContato.cancel();
            }
        }
    });

    dbAddContato.show();
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            finish();
            retu true;
        case R.id.action_add:
            Intent itAddContato = new Intent(this, AddContatoActivity.class);
            startActivity(itAddContato);
            retu true;
        default:
            retu super.onOptionsItemSelected(item);
    }
}

@Override
public void onResume() {
    super.onResume();

    Utility.refreshListView(Contato.EMERGENCIA);
    Utility.refreshListView(Contato.ATENCAO);
    Utility.refreshListView(Contato.NAO_URGENTE);

}

}

Error log

[enter image description here][1]FATAL EXCEPTION: main
                                                               Process: din.uem.ajudaamao, PID: 29880
                                                               java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.sqlite.SQLiteDatabase android.content.Context.openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase$CursorFactory, android.database.DatabaseErrorHandler)' on a null object reference
                                                                   at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:269)
                                                                   at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:223)
                                                                   at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)
                                                                   at din.uem.ajudaamao.database.SQLiteController.insereDado(SQLiteController.java:21)
                                                                   at din.uem.ajudaamao.activities.ContatosActivity.addContato(ContatosActivity.java:125)
                                                                   at din.uem.ajudaamao.activities.AddContatoActivity.onOptionsItemSelected(AddContatoActivity.java:61)
                                                                   at android.app.Activity.onMenuItemSelected(Activity.java:2912)
                                                                   at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:404)
                                                                   at android.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:185)
                                                                   at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:100)
                                                                   at android.support.v7.app.AppCompatDelegateImplV7.onMenuItemSelected(AppCompatDelegateImplV7.java:655)
                                                                   at android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:811)
                                                                   at android.support.v7.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152)
                                                                   at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:958)
                                                                   at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:948)
                                                                   at android.support.v7.widget.ActionMenuView.invokeItem(ActionMenuView.java:618)
                                                                   at android.support.v7.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:139)
                                                                   at android.view.View.performClick(View.java:5201)
                                                                   at android.view.View$PerformClick.run(View.java:21163)
                                                                   at android.os.Handler.handleCallback(Handler.java:746)
                                                                   at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                   at android.os.Looper.loop(Looper.java:148)
                                                                   at android.app.ActivityThread.main(ActivityThread.java:5443)
                                                                   at java.lang.reflect.Method.invoke(Native Method)
                                                                   at com.android.inteal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
                                                                   at com.android.inteal.os.ZygoteInit.main(ZygoteInit.java:618)

http://i.stack.imgur.com/YLwPx.png

asked 29 secs ago

برچسب: نویسنده: استخدام کار تاريخ: جمعه 27 فروردين 1395 ساعت: 9:31

صفحه بندی