我似乎无法弄清楚如何解决NPE错误。是因为我在插入时没有包含ID列吗?或者是因为db返回的数据类型不是long(或int)?
活动:
public class CreateActivity extends ActionBarActivity {
Database db;
SimpleDateFormat s = new SimpleDateFormat("ddMMyyyyhhmmss");
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_create);
}
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.create, menu);
return true;
}
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
public void save(View v){
EditText theitems = (EditText) findViewById(R.id.editText1);
EditText thedescription = (EditText) findViewById(R.id.editText2);
String items = theitems.getText().toString();
String description=thedescription.getText().toString();
long success = db.insertRecord(items, description);
if (success != -1)
Toast.makeText(getApplicationContext(), "Inserted",Toast.LENGTH_LONG).show();
}
public void save_send(View v){
EditText theitems = (EditText)findViewById(R.id.editText1);
EditText thedescription = (EditText)findViewById(R.id.editText2);
String items = theitems.getText().toString();
String description=thedescription.getText().toString();
long success = db.insertRecord(items, description);
if (success != -1)
Toast.makeText(getApplicationContext(), "Inserted",Toast.LENGTH_LONG).show();
}
}
数据库文件
public class Database {
DatabaseHelper dbHelper;
public Database(Context context){
dbHelper = new DatabaseHelper(context, DatabaseHelper.DB_NAME, null, DatabaseHelper.DB_VERSION);
}
public long insertRecord(String items, String description) {
SQLiteDatabase db=dbHelper.getWritableDatabase();
ContentValues initialValues = new ContentValues();
initialValues.put(DatabaseHelper.KEY_ITEMS, items);
initialValues.put(DatabaseHelper.KEY_DESCRIPTION, description);
long id= db.insert(DatabaseHelper.DB_TABLE, null, initialValues);
return id;
}
public class DatabaseHelper extends SQLiteOpenHelper {
public DatabaseHelper(Context context, String name, CursorFactory factory, int version) {
super(context, name, factory, version);
// TODO Auto-generated constructor stub
}
public static final String KEY_ROWID = "id";
public static final String KEY_ITEMS = "items";
public static final String KEY_DESCRIPTION = "description";
public static final String DB_NAME = "shop";
public static final String DB_TABLE = "shop_record";
public static final int DB_VERSION = 2;
public static final String DB_CREATE = "create table if not exists shop_record ("
+ "ID int not null auto_increment,"
+ "items varchar(255),"
+ "description varchar(255),"
+ "date datetime,"
+ "send_status char(10)," + "primary key (ID));";
@Override
public void onCreate(SQLiteDatabase db) {
try {
db.execSQL(DB_CREATE);
} catch (android.database.SQLException e) {
e.printStackTrace();
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
}
}
logcat:
02-24 00:07:26.908: D/OpenGLRenderer(16859): Render dirty regions requested: true
02-24 00:07:26.918: D/Atlas(16859): Validating map...
02-24 00:07:26.947: I/Adreno-EGL(16859): <qeglDrvAPI_eglInitialize:410>: QUALCOMM Build: 10/28/14, c33033c, Ia6306ec328
02-24 00:07:26.948: I/OpenGLRenderer(16859): Initialized EGL, version 1.4
02-24 00:07:26.974: D/OpenGLRenderer(16859): Enabling debug mode 0
02-24 00:07:32.126: D/AndroidRuntime(16859): Shutting down VM
02-24 00:07:32.127: E/AndroidRuntime(16859): FATAL EXCEPTION: main
02-24 00:07:32.127: E/AndroidRuntime(16859): Process: com.example.mythirdapp, PID: 16859
02-24 00:07:32.127: E/AndroidRuntime(16859): java.lang.IllegalStateException: Could not execute method of the activity
02-24 00:07:32.127: E/AndroidRuntime(16859): at android.view.View$1.onClick(View.java:4007)
02-24 00:07:32.127: E/AndroidRuntime(16859): at android.view.View.performClick(View.java:4756)
02-24 00:07:32.127: E/AndroidRuntime(16859): at android.view.View$PerformClick.run(View.java:19749)
02-24 00:07:32.127: E/AndroidRuntime(16859): at android.os.Handler.handleCallback(Handler.java:739)
02-24 00:07:32.127: E/AndroidRuntime(16859): at android.os.Handler.dispatchMessage(Handler.java:95)
02-24 00:07:32.127: E/AndroidRuntime(16859): at android.os.Looper.loop(Looper.java:135)
02-24 00:07:32.127: E/AndroidRuntime(16859): at android.app.ActivityThread.main(ActivityThread.java:5221)
02-24 00:07:32.127: E/AndroidRuntime(16859): at java.lang.reflect.Method.invoke(Native Method)
02-24 00:07:32.127: E/AndroidRuntime(16859): at java.lang.reflect.Method.invoke(Method.java:372)
02-24 00:07:32.127: E/AndroidRuntime(16859): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
02-24 00:07:32.127: E/AndroidRuntime(16859): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
02-24 00:07:32.127: E/AndroidRuntime(16859): Caused by: java.lang.reflect.InvocationTargetException
02-24 00:07:32.127: E/AndroidRuntime(16859): at java.lang.reflect.Method.invoke(Native Method)
02-24 00:07:32.127: E/AndroidRuntime(16859): at java.lang.reflect.Method.invoke(Method.java:372)
02-24 00:07:32.127: E/AndroidRuntime(16859): at android.view.View$1.onClick(View.java:4002)
02-24 00:07:32.127: E/AndroidRuntime(16859): ... 10 more
02-24 00:07:32.127: E/AndroidRuntime(16859): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'long com.example.edit.Database.insertRecord(java.lang.String, java.lang.String)' on a null object reference
02-24 00:07:32.127: E/AndroidRuntime(16859): at com.example.edit.CreateActivity.save(CreateActivity.java:62)
02-24 00:07:32.127: E/AndroidRuntime(16859): ... 13 more
02-24 00:07:34.147: I/Process(16859): Sending signal. PID: 16859 SIG: 9
02-24 00:07:34.621: D/OpenGLRenderer(16947): Render dirty regions requested: true
02-24 00:07:34.629: D/Atlas(16947): Validating map...
02-24 00:07:34.663: I/Adreno-EGL(16947): <qeglDrvAPI_eglInitialize:410>: QUALCOMM Build: 10/28/14, c33033c, Ia6306ec328
02-24 00:07:34.664: I/OpenGLRenderer(16947): Initialized EGL, version 1.4
02-24 00:07:34.685: D/OpenGLRenderer(16947): Enabling debug mode 0
答案 0 :(得分:3)
你得到了NPE,因为你的db=null
在
long success = db.insertRecord(items, description);
所以initialized
之前使用
db=new Database(CreateActivity.this);
答案 1 :(得分:2)
NullPointerException:尝试调用虚拟方法&#39; long com.example.edit.Database.insertRecord
由于db
的{{1}}对象为Database
。
在用于调用null
class:
db
对象
Database
答案 2 :(得分:1)
Database db;
这意味着db
是null
。尚未初始化
试试这个:
db = new Database(getApplciationContext());