Invocar Metodos desde un AlertDialog

  • Respuestas:1
Dan Castro R
  • Posts del Foro: 1

3 jul. 2016 19:49:20 vía Web

Que tan buen día tenga todos, me acabo de unir al foro y es que hace poco empecé a programar en Android.
Me he topado con un error que no he podido encontrarle Solución, por mas que he buscado en Internet no
he podido pasar de ahí, es para un proyecto muy importante que tengo que entregar.

La cosa es que tengo una aplicación que al iniciar usa una Base de Datos local para usuarios que hayan iniciado sesión, valida al usuario por medio de una conexión a base de datos externa alojada en cierta pagina de internet, una vez validado al usuario, el usuario y contraseña se guardan en una base de datos local, todo bien ahí, al cerrar la aplicación y volverla abrir, justo al momento en el que la abres se ejecuta una validación. Si NO Hay usuarios ingresados en la base de datos local, abre el inicio de sesión, de lo contrario muestra un mensaje diciendo "YA HAY UNA SESIÓN INICIADA, DESEAS CONTINUAR O INICIAR SESIÓN CON OTRO USUARIO" al momento de que el usuario le da clic a CONTINUAR u OTRA CUENTA la aplicación truena, se cierra y me marca este error en la linea 106 del método select_dbmes de Condicion.java ("SQLiteDatabase bd = interceramic.getWritableDatabase();"):
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

se me olvidaba, esta de mas, agregue una variable global a la que se le asigna un 1 o un 0 ya sea 1 si el usuario presiono Continuar, o 0 si presiono otra cuenta. y esta la obtiene el método select_bdmes en la variable PULSADO.

El codigo de mi AlertDIalog es este AlertaInicio.java:

package com.hanna.montacargas;

import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.DialogInterface;
//import android.content.Intent;
//import android.database.Cursor;
//import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.widget.Toast;

/**
* Created by ditic on 30/06/2016.
*/
public class AlertaInicio extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
//return super.onCreateDialog(savedInstanceState);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Manejo de sesiones ");
builder.setMessage("Hay una sesion iniciada ya, desea continuar o iniciar con otra cuenta?")
.setPositiveButton("Continuar", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {

                    MyApplication.helper.setValid("1");
                    Toast.makeText(getActivity(), "presionaste continuar", Toast.LENGTH_LONG).show();

                    Condicion Condicion = new Condicion();
                    Condicion.select_bdmes();



                }
            })
            .setNegativeButton("Otra cuenta", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {

                    MyApplication.helper.setValid("0");
                    Toast.makeText(getActivity(), "presionaste otra cuenta", Toast.LENGTH_LONG).show();

                    Condicion Condicion = new Condicion();
                    Condicion.select_bdmes();
                }
            });
    return builder.create();
}

}

y el código en donde se encuentra el método es este Condicion.java:
de hecho este es el código con el que inicia toda la aplicación, al abrir la app esto se ejecuta primero.

package com.hanna.montacargas;

import android.app.Activity;
//import android.app.Dialog;
//import android.app.Fragment;
import android.app.FragmentManager;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
//import android.os.Build;
import android.os.Bundle;
//import android.widget.Toast;
//import java.util.Objects;

//Importacion de paquete de dialogo
//import android.annotation.TargetApi;
//import android.content.DialogInterface;
//import android.support.v7.app.AlertDialog;
//import android.widget.Toast;
//importacion de paquetes necesarios finalizado

/**
* Created by
*/
public class Condicion extends Activity {

String pulsado;
private String[] itemArrey;
Cursor cursor=null;

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

    crea_bd();
    select_bd();
}

//metodo para mandar a llamar al mensaje de validacion
public void creaDialgo(){
    FragmentManager fg = getFragmentManager();
    AlertaInicio alertaInicio = new AlertaInicio();
    alertaInicio.show(fg,"alerMessage");
}
//fin cod add*/


public void crea_bd()
{
    AdminSQLiteOpenHelper interceramic = new AdminSQLiteOpenHelper(this, "bdmont", null, 1);
    SQLiteDatabase bd = interceramic.getWritableDatabase();
    //bd.execSQL("drop table if exists usuario");
    bd.execSQL("create table if not exists usuario(usr text, name text)");
    bd.close();
}


public void select_bd()
{

    AdminSQLiteOpenHelper interceramic = new AdminSQLiteOpenHelper(this, "bdmont", null, 1);
    SQLiteDatabase bd = interceramic.getWritableDatabase();
    cursor=bd.rawQuery("SELECT usr, name FROM usuario",null);

    int numeroDeFilas=cursor.getCount();
    if (numeroDeFilas == 0)
    {
        //bd.execSQL("delete from usuario");
        bd.close();
        Intent now =new Intent(Condicion.this, LoginActivity.class);
        startActivity(now);
        finish();

    }
    else
    {
        bd.close();
        creaDialgo();


    }

}

public void select_bdmes()
{

    AdminSQLiteOpenHelper interceramic = new AdminSQLiteOpenHelper(this, "bdmont", null, 1);
    SQLiteDatabase bd = interceramic.getWritableDatabase();
    cursor=bd.rawQuery("SELECT usr, name FROM usuario",null);

    pulsado=MyApplication.helper.aleInicio();

    int numeroDeFilas=cursor.getCount();
    if (pulsado.equals("0"))
    {
        bd.execSQL("delete from usuario");
        bd.close();
        Intent now =new Intent(Condicion.this, LoginActivity.class);
        startActivity(now);
        finish();

    }
    else
    {
        itemArrey = new String[numeroDeFilas+1];
        cursor.moveToFirst();

        for(int i=1; i<=numeroDeFilas; i++){
            itemArrey[i-1] = cursor.getString(0);
            MyApplication.helper.set_usr(String.valueOf(cursor.getString(0)));
            MyApplication.helper.set_nom(cursor.getString(1));
            cursor.moveToNext();

        }
        bd.close();
        Intent now =new Intent(Condicion.this, Menu.class);
        startActivity(now);
        finish();

    }

}

}

Ya intente de todo!!! pero repito, mis conocimientos en Android no son muy buenos.
Una disculpa de antemano si mi post es muy largo o muy tonto, muchísimas gracias, tengan un excelente día.

Contestar
Giovanni Salcedo
  • Posts del Foro: 1

15 jul. 2016 16:22:32 vía Web

Te recomendaria validar que el objeto interceramic se haya creado satisfactoriamente antes de mandar llamar el metodo getWritableDatabase, de igual manera deberias incluir try catch para realizar las acciones correspondientes en caso de que algo salga mal.

Contestar