shengjunlintianxia 2018-05-26 02:13 采纳率: 40%
浏览 818
已结题

android 按钮失灵 no keyboard for id 0

图片说明
如图,添加按钮点击无反应,也没错误提示,就是在两个edittext输入时logcat有这样的警告
图片说明
代码如下:

 import java.sql.Date;
import java.text.SimpleDateFormat;

import android.R.integer;
import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class AddFoodActivity1 extends Activity implements OnClickListener{
    private MySQLiteOpenHelper dbHelper;
    private EditText sFoodName1,iEXP1;
    String foodsName1,foodsEXP1;
    int nameFlag,expFlag;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.add_food_activity1);


        sFoodName1 = (EditText) findViewById(R.id.et_foodName1);
        iEXP1 = (EditText) findViewById(R.id.et_EXP1);



    }



    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
//              db.beginTransaction();//开启事务

        if (v.getId() == R.id.bt_add1) {
            foodsName1 = sFoodName1.getText().toString();
            foodsEXP1 = iEXP1.getText().toString();

            dbHelper = MySQLiteOpenHelper.getInstance(this);
            SQLiteDatabase db = dbHelper.getWritableDatabase();
            //查询是否已存在食物名称
            Cursor cursor = db.rawQuery("select foodsName from food1 where foodsName=?", new String[]{foodsName1});
            while (cursor.moveToNext()){
                String name = cursor.getString(1);
                String exp = cursor.getString(2);

                if (foodsName1.isEmpty()){
                    Toast.makeText(AddFoodActivity1.this, "请输入食物名称", Toast.LENGTH_SHORT).show(); 
                    break;

                }else if(foodsEXP1.isEmpty()){
                    Toast.makeText(AddFoodActivity1.this, "请输入保质期", Toast.LENGTH_SHORT).show();
                    break;

                }else if (foodsName1.isEmpty()&&foodsEXP1.isEmpty()) {
                    Toast.makeText(AddFoodActivity1.this, "请输入食物名称与保质期", Toast.LENGTH_SHORT).show();
                    break;

                }

                nameFlag = 1;//数据库没有此名

                if (foodsName1.equals(name)) {
                    Toast.makeText(AddFoodActivity1.this, "添加失败,食品名重复,请重新输入", Toast.LENGTH_SHORT).show();
                    nameFlag = 0;
                    break;
                }

            }

            if (nameFlag == 1) {
                int trans = Integer.parseInt(foodsEXP1);
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                Date curDate = new Date(System.currentTimeMillis());
                String str=sdf.format(curDate);
                String exptime = str + trans*24*60*60*1000;

                db.execSQL("insert into food1 values (null,?,?)",new String[]{foodsName1,exptime});
//              db.setTransactionSuccessful();//事务执行成功
//              db.endTransaction();//结束事务
                Toast.makeText(AddFoodActivity1.this, "添加成功", Toast.LENGTH_SHORT).show();

            }
            cursor.close();
            db.close();
        }
    }

}

这是数据库

 import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class MySQLiteOpenHelper extends SQLiteOpenHelper {
    private static MySQLiteOpenHelper instance;
    public static final String CREATE_FOOD1 = "create table if not exists food1(id integer primary key autoincrement,foodsName varchar(20),EXP NUMERIC)";
    public MySQLiteOpenHelper(Context context,String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub
        db.execSQL(CREATE_FOOD1);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub
//       db.execSQL("drop table if exists food");
//       onCreate(db);

    }
    public static MySQLiteOpenHelper getInstance(Context context) {
        if (instance == null) {
            instance = new MySQLiteOpenHelper(context, "Food1.db", null, 2);
        }
        return instance;

    }


}

cmd查看数据库发现表下没有column,感觉是数据库问题,但具体什么地方又不知道

图片说明

debug了一下,发现dbHelper这里可能死循环了,log cat里一直报那两行信息
图片说明

图片说明
图片说明

新手上路,求大神指教

  • 写回答

6条回答

  • dabocaiqq 2018-05-26 04:51
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler