再次嗨,我需要在 SQLite 中插入数据方面的帮助,当我单击按钮时,我的应用程序崩溃了...
有人可以检查一下吗?
SavacDataBaseAdapter.java:
package com.example.yiquishum.savac4k;
import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import android.widget.Toast;
public class SavacDataBaseAdapter {
SavacDBHelper helper;
public SavacDataBaseAdapter(Context context){
helper = new SavacDBHelper(context);
}
public long InsertData(String name, String username, String pass, String gen, String state){
SQLiteDatabase db = helper.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(SavacDBHelper.FName, name);
contentValues.put(SavacDBHelper.Fnameuser, username);
contentValues.put(SavacDBHelper.FPass, pass);
contentValues.put(SavacDBHelper.Fgen, gen);
contentValues.put(SavacDBHelper.Fstate, state);
long id = db.insert(SavacDBHelper.TABLE_NAME, null, contentValues);
return id;
}
static class SavacDBHelper extends SQLiteOpenHelper {
private static final String TAG = "BD Savac";
static final String DATABASE_NAME = "Savac4K";
static final String TABLE_NAME = "SavacUser";
static final int DATABASE_VERSION = 2;
/* Aqui iran las variables que van en el Query */
static final String FIDuser = "_Id";
static final String FName = "Nombre";
static final String Fnameuser = "Usuario";
static final String FPass = "Contra";
static final String Fgen = "Gen";
static final String Fstate = "Estado";
/**
* ******************************************
*/
/* Aqui iran los Querys de la Base de Datos */
static final String Query1 = "CREATE TABLE " + TABLE_NAME + " (" + FIDuser + " INTEGER PRIMARY KEY AUTOINCREMENT, " + FName + " VARCHAR(255), " + Fnameuser + " F VARCHAR(255), " + FPass + " VARCHAR(255), " + Fgen + " INTEGER, " + Fstate + " VARCHAR(255));";
static final String DROP_TABLE = "DROP TABLE IF EXIST " + TABLE_NAME;
/**
* *****************************************
*/
public SavacDBHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
Toast.makeText(context, "Entro a la BD", Toast.LENGTH_LONG).show();
Log.v(TAG, "Entro a la BD");
}
@Override
public void onCreate(SQLiteDatabase db) {
//Crear la Base de datos osea las Tablas
db.execSQL(Query1);
Log.v(TAG, "Se crea la BD");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL(DROP_TABLE);
onCreate(db);
}
}
}
Pregistro.java:
package com.example.yiquishum.savac4k;
import android.database.sqlite.SQLiteDatabase;
import android.os.Message;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;
public class Pregistro extends ActionBarActivity {
SavacDataBaseAdapter SavacDataBaseAdap;
// Declaracion de las Variables para insertarlas en la BD
EditText Rname, Rusername, Rpass;
Spinner Rgen, Rstate;
private static final String TAG = "Registro";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pregistro);
Spinner state = (Spinner) findViewById(R.id.estado);
ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.estado,
android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
state.setAdapter(adapter);
Spinner sex = (Spinner) findViewById(R.id.genero);
ArrayAdapter adapter2 = ArrayAdapter.createFromResource(this, R.array.xexo,
android.R.layout.simple_spinner_item);
adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
sex.setAdapter(adapter2);
SavacDataBaseAdap = new SavacDataBaseAdapter(this);
/* Aquí obtenemos los datos por vía ID */
Rname = (EditText) findViewById(R.id.nombre);
Rusername = (EditText) findViewById(R.id.Usuario);
Rpass = (EditText) findViewById(R.id.pass);
Rgen = (Spinner) findViewById(R.id.genero);
Rstate = (Spinner) findViewById(R.id.estado);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.pregistro, 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();
switch (id){
case R.id.cancelar:
Toast.makeText(this, "Regresando a la pantalla de Inicio ='(", Toast.LENGTH_SHORT).show();
finish();
Log.v(TAG, "Cancelada el Registro");
return true;
default:
return onOptionsItemSelected(item);
}
}
public void Registrar(View view){
Toast.makeText(this, "Gracias por Registrarte", Toast.LENGTH_SHORT).show();
finish();
Log.v(TAG, "Se ha registrado satisfactoriamente");
//Aqui obtendremos los datos para insertarlo en la BD
String Ename = Rname.getText().toString();
String Euser = Rusername.getText().toString();
String Epass = Rpass.getText().toString();
String Egen = Rgen.getOnItemSelectedListener().toString();
String Esta = Rstate.getOnItemSelectedListener().toString();
long id = SavacDataBaseAdap.InsertData(Ename, Euser, Epass, Egen, Esta);
if (id < 0){
Toast.makeText(this, "No se pudo registrar", Toast.LENGTH_LONG).show();
Log.v(TAG, "No se pudo Resigtrar el Usuario");
} else {
Toast.makeText(this, "Bienvenido " +Euser, Toast.LENGTH_LONG).show();
Log.v(TAG, "Se pudo registrar el Usuario");
}
}
}
XML Pregistro:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.example.yiquishum.savac4k.Pregistro">
<EditText
android:layout_width="200dp"
android:layout_height="wrap_content"
android:id="@+id/nombre"
android:hint="Nombre"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:gravity="center"/>
<EditText
android:layout_width="200dp"
android:layout_height="wrap_content"
android:id="@+id/Usuario"
android:hint="Nombre de Usuario"
android:layout_below="@+id/nombre"
android:layout_centerHorizontal="true"
android:layout_marginTop="41dp"
android:gravity="center"/>
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="textPassword"
android:ems="10"
android:id="@+id/pass"
android:hint="@string/pass"
android:gravity="center"
android:layout_below="@+id/Usuario"
android:layout_alignLeft="@+id/Usuario"
android:layout_alignStart="@+id/Usuario"
android:layout_marginTop="38dp" />
<Spinner
android:layout_width="200dp"
android:layout_height="wrap_content"
android:id="@+id/genero"
android:layout_centerVertical="true"
android:layout_alignStart="@+id/pass" />
<Spinner
android:layout_width="200dp"
android:layout_height="wrap_content"
android:id="@+id/estado"
android:layout_below="@+id/genero"
android:layout_alignStart="@+id/genero" />
<Button
android:layout_width="200dp"
android:layout_height="wrap_content"
android:text="Registrar"
android:id="@+id/button1"
android:layout_below="@+id/estado"
android:layout_centerHorizontal="true"
android:layout_marginTop="39dp"
android:onClick="Registrar"/>
堆栈跟踪
08-19 15:08:09.597: E/AndroidRuntime(19838): FATAL EXCEPTION: main
08-19 15:08:09.597: E/AndroidRuntime(19838): Process: com.example.yiquishum.savac4k, PID: 19838
08-19 15:08:09.597: E/AndroidRuntime(19838): java.lang.IllegalStateException: Could not execute method of the activity
08-19 15:08:09.597: E/AndroidRuntime(19838): at android.view.View$1.onClick(View.java:3823)
08-19 15:08:09.597: E/AndroidRuntime(19838): at android.view.View.performClick(View.java:4438)
08-19 15:08:09.597: E/AndroidRuntime(19838): at android.view.View$PerformClick.run(View.java:18422)
08-19 15:08:09.597: E/AndroidRuntime(19838): at android.os.Handler.handleCallback(Handler.java:733)
08-19 15:08:09.597: E/AndroidRuntime(19838): at android.os.Handler.dispatchMessage(Handler.java:95)
08-19 15:08:09.597: E/AndroidRuntime(19838): at android.os.Looper.loop(Looper.java:136)
08-19 15:08:09.597: E/AndroidRuntime(19838): at android.app.ActivityThread.main(ActivityThread.java:5017)
08-19 15:08:09.597: E/AndroidRuntime(19838): at java.lang.reflect.Method.invokeNative(Native Method)
08-19 15:08:09.597: E/AndroidRuntime(19838): at java.lang.reflect.Method.invoke(Method.java:515)
08-19 15:08:09.597: E/AndroidRuntime(19838): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
08-19 15:08:09.597: E/AndroidRuntime(19838): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
08-19 15:08:09.597: E/AndroidRuntime(19838): at dalvik.system.NativeStart.main(Native Method)
08-19 15:08:09.597: E/AndroidRuntime(19838): Caused by: java.lang.reflect.InvocationTargetException
08-19 15:08:09.597: E/AndroidRuntime(19838): at java.lang.reflect.Method.invokeNative(Native Method)
08-19 15:08:09.597: E/AndroidRuntime(19838): at java.lang.reflect.Method.invoke(Method.java:515)
08-19 15:08:09.597: E/AndroidRuntime(19838): at android.view.View$1.onClick(View.java:3818)
08-19 15:08:09.597: E/AndroidRuntime(19838): ... 11 more
08-19 15:08:09.597: E/AndroidRuntime(19838): Caused by: java.lang.NullPointerException
08-19 15:08:09.597: E/AndroidRuntime(19838): at com.example.yiquishum.savac4k.Pregistro.Registrar(Pregistro.java:92)
08-19 15:08:09.597: E/AndroidRuntime(19838): ... 14 more
如果您需要更多信息,他们会告诉我,谢谢大家:)
最佳答案
正如其他人所指出的,当尝试检索 Rgen.getOnItemSelectedListener() 时,您会遇到 NPE。如果您尚未设置 OnItemSelectedListener,此方法将返回 null,这将在尝试调用 toString() 时导致 NPE。
请确保在尝试检索并使用 OnItemSelectedListener 之前设置它。这里有一些例子:
http://developer.android.com/guide/topics/ui/controls/spinner.html
关于java - 单击按钮尝试插入 SQLite 后崩溃(代码和堆栈跟踪),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25391540/