作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我似乎不知道如何修复 NPE 错误。是不是因为我插入的时候没有包含ID列?或者是因为数据库返回的数据类型不是 long (或 int)?
Activity :
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
}
}
}
日志猫:
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
最佳答案
您得到 NPE 是因为您的 db=null
位于
long success = db.insertRecord(items, description);
所以在使用之前初始化
它
db=new Database(CreateActivity.this);
关于java.lang.IllegalStateException : Could not execute method of the activity caused by Invocation and NPE error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28688647/
我是一名优秀的程序员,十分优秀!