om.example.lenovo.ciba E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.lenovo.ciba, PID: 19916
java.lang.IllegalStateException: Could not execute method for android:onClick
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293)
at android.view.View.performClick(View.java:6213)
at android.widget.TextView.performClick(TextView.java:11074)
at android.view.View$PerformClick.run(View.java:23645)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6646)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
at android.view.View.performClick(View.java:6213)
at android.widget.TextView.performClick(TextView.java:11074)
at android.view.View$PerformClick.run(View.java:23645)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6646)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
Caused by: java.lang.NumberFormatException: For input string: ""
at java.lang.Integer.parseInt(Integer.java:533)
at java.lang.Integer.parseInt(Integer.java:556)
at com.example.lenovo.ciba.BasestaffActivity.addStaff(BasestaffActivity.java:30)
at java.lang.reflect.Method.invoke(Native Method)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
at android.view.View.performClick(View.java:6213)
at android.widget.TextView.performClick(TextView.java:11074)
at android.view.View$PerformClick.run(View.java:23645)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6646)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
package com.example.lenovo.ciba;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class BasestaffActivity extends AppCompatActivity {
private EditText etSname, etAge,etXinzi,etTel,etZhiwei,etBumen;
private TextView tvShow;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_basestaff);
this.etSname = (EditText) findViewById(R.id.edit_staff);
this.etAge = (EditText) findViewById(R.id.edit_age);
this.etXinzi = (EditText) findViewById(R.id.edit_xinzi);
this.etTel = (EditText) findViewById(R.id.edit_Tel);
this.etZhiwei = (EditText) findViewById(R.id.edit_zhiwei);
this.etBumen = (EditText) findViewById(R.id.edit_bumen);
this.tvShow = (TextView) findViewById(R.id.textStaff);}
// 添加员工
public void addStaff(View view){
// 获取输入的员工数据
String sname = etSname.getText().toString();
int age = Integer.parseInt(etAge.getText().toString());
int xinzi = Integer.parseInt(etXinzi.getText().toString());
int tel = Integer.parseInt(etTel.getText().toString());
String zhiwei = etZhiwei.getText().toString();
String bumen = etBumen.getText().toString();
// 向数据库表中添加员工
// 1. 实例化数据库的操作类
SQLiteDBHelper sqLiteDBHelper = new SQLiteDBHelper(getApplicationContext());
// 2. 通过操作类获取数据库实例
SQLiteDatabase sqLiteDatabase = sqLiteDBHelper.getWritableDatabase();
// 3. 通过数据库实例执行SQL命令
try {
sqLiteDatabase.execSQL("insert into student(sname,age,tel,xinzi,zhiwei,bumen) values(?,?,?,?,?,?)", new Object[]{sname, age,tel,xinzi,zhiwei,bumen});
Toast.makeText(this, "员工信息添加成功!", Toast.LENGTH_SHORT).show();
etSname.setText("");
etAge.setText("");
etXinzi.setText("");
etTel.setText("");
etZhiwei.setText("");
etTel.setText("");
}catch (Exception e){
e.printStackTrace();
Toast.makeText(this, "员工信息添加失败!", Toast.LENGTH_SHORT).show();
}
}
}
Caused by: java.lang.NumberFormatException: For input string: ""
看下at com.example.lenovo.ciba.BasestaffActivity.addStaff(BasestaffActivity.java:30)
里面有一个integer.parseInt的方法,将字符串转换为数字,但是这个字符串是空的。
Caused by: java.lang.reflect.InvocationTargetException
包冲突、有重复包或者缺少包;
项目jdk和部署jdk版本不一样,导致InvocationTargetException异常信息返回一个空值,没有调用invoc里的重写消息方法;
映射文件发生改变。
检查数据库表名是否正确是否一致
检查导入的jar包版本是否正确
检查是否重复导入包。Android Studio自带了SQlite包,无需重复导入包。
若是函数出错请将代码贴上
int age = Integer.parseInt(etAge.getText().toString());
int xinzi = Integer.parseInt(etXinzi.getText().toString());
int tel = Integer.parseInt(etTel.getText().toString());
调试,看看这三行代码的文本是不是空
int age = Integer.parseInt(etAge.getText().toString());
int xinzi = Integer.parseInt(etXinzi.getText().toString());
int tel = Integer.parseInt(etTel.getText().toString());
很明显这一段有问题啦
一般都不是这样写的,都是先获取值,再判断是否为空,再进行类型转换,避免一下类型转换的错误。
例如:String age = etAge.getText().toString().trim();
if(age!=null && !"".equals(age)){
int myAge = Integer.parseInt(age);
}
其他的类似,一个个错误慢慢改,这是最简单的。
Caused by: java.lang.NumberFormatException: For input string: ""
Integer.parserInt(""),传了个空窜报错
一楼正解
还有种可能你数据库一开始建立的时候有没有xinzi tel bumen这几个字段?
数据库版本升级下试试
java.lang.NumberFormatException: For input string: ""
at java.lang.Integer.parseInt(Integer.java:533)
at java.lang.Integer.parseInt(Integer.java:556)
看看533和556行,parseInt 参数为“”,所以异常了。。