Android - Error para introducir y buscar datos en una base de datos

 
Vista:

Error para introducir y buscar datos en una base de datos

Publicado por Dgdstroyer (1 intervención) el 03/09/2015 03:49:53
Hola buenas, estoy creando una aplicación que en la actividad que me da el error debo poder introducir los datos de un contacto (es una especie de agenda), esos datos deben guardarse en una base de datos y luego si quiero debo poder buscar los datos por el nombre del contacto que yo he introducido, para ello en la interface he puesto unos plain text donde introducir nombre, telefono, correo y cumpleaños, luego un par de botones, uno para guardar el contacto y otro para buscar el contacto por el nombre, al escribir los datos y darle al botón guardar se me para directamente la aplicación y aparece el siguiente fallo:

09-03 01:27:48.662 2884-2884/com.example.usuario.agendacontactos E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.usuario.agendacontactos, PID: 2884
java.lang.IllegalStateException: Could not execute method of the activity
at android.view.View$1.onClick(View.java:4020)
at android.view.View.performClick(View.java:4780)
at android.view.View$PerformClick.run(View.java:19866)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5257)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at android.view.View$1.onClick(View.java:4015)
at android.view.View.performClick(View.java:4780)
at android.view.View$PerformClick.run(View.java:19866)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5257)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Caused by: java.lang.StringIndexOutOfBoundsException: length=0; index=0
at java.lang.String.indexAndLength(String.java:500)
at java.lang.String.charAt(String.java:494)
at android.app.ContextImpl.validateFilePath(ContextImpl.java:2376)
at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:1143)
at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:268)
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:223)
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)
at com.example.usuario.agendacontactos.BaseDatos.NuevoContacto(BaseDatos.java:39)
at com.example.usuario.agendacontactos.Contactos.Guardar(Contactos.java:52)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at android.view.View$1.onClick(View.java:4015)
at android.view.View.performClick(View.java:4780)
at android.view.View$PerformClick.run(View.java:19866)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5257)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)


La clase de la base de datos es la siguiente:

package com.example.usuario.agendacontactos;

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

/**
* Created by Usuario on 03/09/2015.
*/
public class BaseDatos extends SQLiteOpenHelper {

public BaseDatos (Context ct, String nm, int v)
{
super(ct,nm,null,v);
}

@Override
public void onCreate(SQLiteDatabase db)
{
System.out.println("Creando Tabla");
db.execSQL("CREATE TABLE CONTACTOS(" +
" NOMBRE TEXT PRIMARY KEY," +
" NUMERO TEXT NOT NULL, " +
" CORREO TEXT, " +
" CUMPLEAÑOS TEXT)");
System.out.println("TABLA CONTACTOS Creada");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
db.execSQL("DROP TABLE IF EXITS CONTACTOS");
}

public void NuevoContacto(String nombre, String numero, String correo, String cumpleaños)
{
SQLiteDatabase db = this.getWritableDatabase();
if (db!=null)
{
ContentValues v = new ContentValues();
v.put("NOMBRE", nombre);
v.put("NUMERO", numero);
v.put("CORREO", correo);
v.put("CUMPLEAÑOS", cumpleaños);
long resp=db.insert("CONTACTOS",null,v);
if(resp!=0)
System.out.println("Contacto Creado");
else
System.out.println("Error: Contacto NO Creado");
db.close();
}
else
System.out.println("Error en la conexión con la base de datos");
}

public Cursor Contactos(String table,String[]col,String where)
{
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.query("CONTACTOS",col,where,null,null,null,null);
return(cursor);
}
}


Y la clase de la actividad que hace que se pare la aplicación al darle al botón guardar es la siguiente:

package com.example.usuario.agendacontactos;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class Contactos extends Activity {

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

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_contactos, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();

//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
Intent i = new Intent(this,NuestroMn.class);
startActivityForResult(i, 1);
return true;
}

return super.onOptionsItemSelected(item);
}

public void Guardar(View v)
{
BaseDatos BD = new BaseDatos(this,"",1);
EditText Vnombre = (EditText)findViewById(R.id.nombre);
EditText Vnumero = (EditText)findViewById(R.id.numero);
EditText Vcorreo = (EditText)findViewById(R.id.correo);
EditText Vcumpleaños = (EditText)findViewById(R.id.cumpleaños);
BD.NuevoContacto(Vnombre.getText().toString(),Vnumero.getText().toString(),Vcorreo.getText().toString(),Vcumpleaños.getText().toString());
}

public void BuscarNombres (View v)
{
BaseDatos BD = new BaseDatos(this,"",1);

String[] cols = {"NUMERO","CORREO","CUMPLEAÑOS"};

EditText Vnombre = (EditText)findViewById(R.id.nombre);
EditText Vnumero = (EditText)findViewById(R.id.numero);
EditText Vcorreo = (EditText)findViewById(R.id.correo);
EditText Vcumpleaños = (EditText)findViewById(R.id.cumpleaños);
Cursor c=BD.Contactos("CONTACTOS",cols,"NOMBRE="+Vnombre.getText().toString());
if (c.moveToNext())
{
Vnumero.setText(c.getString(0));
Vcorreo.setText(c.getString(1));
Vcumpleaños.setText(c.getString(2));
}
else
Toast.makeText(getApplicationContext(),"Contacto no encontrado", Toast.LENGTH_SHORT).show();


}
}


No consigo ver el fallo espero que alguno pueda ayudarme, muchas gracias de antemano, saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder