2 qq 38034939 qq_38034939 于 2017.12.23 19:47 提问

android 和sqlite 问题? 小白不会 大佬们看一看! 5C

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();
    }
}

}

7个回答

caozhy
caozhy   Ds   Rxr 2017.12.23 23:17

int age = Integer.parseInt(etAge.getText().toString());
int xinzi = Integer.parseInt(etXinzi.getText().toString());
int tel = Integer.parseInt(etTel.getText().toString());

调试,看看这三行代码的文本是不是空

caozhy
caozhy 回复qq_38034939: 检查这些控件的id,有没有找到,是不是搞混淆了。再检查你的数据库字段的类型
26 天之前 回复
qq_38034939
qq_38034939 回复qq_38034939: 但是不会改!
26 天之前 回复
qq_38034939
qq_38034939 对对 要是加了 age xinzi tel bumen 就不行 剩下 age id name 就可以
26 天之前 回复
caozhy
caozhy   Ds   Rxr 2017.12.23 19:51

Caused by: java.lang.NumberFormatException: For input string: ""
看下at com.example.lenovo.ciba.BasestaffActivity.addStaff(BasestaffActivity.java:30)
里面有一个integer.parseInt的方法,将字符串转换为数字,但是这个字符串是空的。

u013147734
u013147734   2017.12.25 13:46

Caused by: java.lang.NumberFormatException: For input string: ""
Integer.parserInt(""),传了个空窜报错
一楼正解

xieweiqi1860
xieweiqi1860   2017.12.26 10:32

还有种可能你数据库一开始建立的时候有没有xinzi tel bumen这几个字段?
数据库版本升级下试试

qq_36146165
qq_36146165   2017.12.23 21:02

检查数据库表名是否正确是否一致
检查导入的jar包版本是否正确
检查是否重复导入包。Android Studio自带了SQlite包,无需重复导入包。
若是函数出错请将代码贴上

qq_36146165
qq_36146165 回复qq_38034939: 建立数据库表的代码呢
26 天之前 回复
qq_38034939
qq_38034939 贴出来了
27 天之前 回复
ymei306
ymei306   2017.12.23 20:28

Caused by: java.lang.reflect.InvocationTargetException

包冲突、有重复包或者缺少包;
项目jdk和部署jdk版本不一样,导致InvocationTargetException异常信息返回一个空值,没有调用invoc里的重写消息方法;
映射文件发生改变。

u012516952
u012516952   2017.12.24 13:01

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);
}
其他的类似,一个个错误慢慢改,这是最简单的。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!