Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我无法在应用程序中保存数据?_Java_Android_Sql_Database_Sqlite - Fatal编程技术网

Java 为什么我无法在应用程序中保存数据?

Java 为什么我无法在应用程序中保存数据?,java,android,sql,database,sqlite,Java,Android,Sql,Database,Sqlite,我是一名学生,最近开始在安卓工作室工作。我不太了解这件事。我正在开发一个应用程序,在该应用程序中,我将项目名称及其数量保存在数据库中,并在输入的数据是否保存时显示toast消息。问题是每当我点击save按钮时,我的应用程序就会崩溃 以下是我的DatabaseHelper类: public class DatabaseHelper extends SQLiteOpenHelper { public static final String DATABASE_NAME = "Items.db

我是一名学生,最近开始在安卓工作室工作。我不太了解这件事。我正在开发一个应用程序,在该应用程序中,我将项目名称及其数量保存在数据库中,并在输入的数据是否保存时显示toast消息。问题是每当我点击save按钮时,我的应用程序就会崩溃

以下是我的DatabaseHelper类:

public class DatabaseHelper extends SQLiteOpenHelper {

    public static final String DATABASE_NAME = "Items.db";
    public static final String TABLE_NAME = "item_table";
    public static final String COL_1 = "ID";
    public static final String COL_2 = "ITEM";
    public static final String COL_3 = "AMOUNT";


    public DatabaseHelper(@Nullable Context context) {

        super(context, DATABASE_NAME, null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String createTable = "CREATE TABLE" + TABLE_NAME + "(ID INTEGER PRIMARY KEY AUTOINCREMENT," + "ITEM TEXT, AMOUNT TEXT)";
        db.execSQL(createTable);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP IF TABLE EXISTS" + TABLE_NAME);
        onCreate(db);

    }

    public boolean addData(String item, String amount){
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(COL_2,item);
        contentValues.put(COL_3,item);

        long result = db.insert(TABLE_NAME,null, contentValues);

        if(result == -1){
            return false;
        }else {
            return true;
        }


    }


}
public class MainActivity extends AppCompatActivity {

    DatabaseHelper myDb;
    EditText editItem, editAmount;
    Button buttonSave;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        myDb = new DatabaseHelper(this);

        editItem = (EditText)findViewById(R.id.item_field);
        editAmount = (EditText)findViewById(R.id.amount_field);
        buttonSave = (Button)findViewById(R.id.button_save);

        AddData();

    }

    public void AddData(){
        buttonSave.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String item = editItem.getText().toString();
                String amount = editAmount.getText().toString();

                boolean insertData = myDb.addData(item, amount);

                if(insertData == true){
                    Toast.makeText(MainActivity.this,"Amount is saved with Item detail", Toast.LENGTH_LONG).show();
                }else {
                    Toast.makeText(MainActivity.this, "Error occurred : Detailed are not saved", Toast.LENGTH_LONG).show();
                }
            }
        });
    }


}
以下是我的主要活动类:

public class DatabaseHelper extends SQLiteOpenHelper {

    public static final String DATABASE_NAME = "Items.db";
    public static final String TABLE_NAME = "item_table";
    public static final String COL_1 = "ID";
    public static final String COL_2 = "ITEM";
    public static final String COL_3 = "AMOUNT";


    public DatabaseHelper(@Nullable Context context) {

        super(context, DATABASE_NAME, null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String createTable = "CREATE TABLE" + TABLE_NAME + "(ID INTEGER PRIMARY KEY AUTOINCREMENT," + "ITEM TEXT, AMOUNT TEXT)";
        db.execSQL(createTable);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP IF TABLE EXISTS" + TABLE_NAME);
        onCreate(db);

    }

    public boolean addData(String item, String amount){
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(COL_2,item);
        contentValues.put(COL_3,item);

        long result = db.insert(TABLE_NAME,null, contentValues);

        if(result == -1){
            return false;
        }else {
            return true;
        }


    }


}
public class MainActivity extends AppCompatActivity {

    DatabaseHelper myDb;
    EditText editItem, editAmount;
    Button buttonSave;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        myDb = new DatabaseHelper(this);

        editItem = (EditText)findViewById(R.id.item_field);
        editAmount = (EditText)findViewById(R.id.amount_field);
        buttonSave = (Button)findViewById(R.id.button_save);

        AddData();

    }

    public void AddData(){
        buttonSave.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String item = editItem.getText().toString();
                String amount = editAmount.getText().toString();

                boolean insertData = myDb.addData(item, amount);

                if(insertData == true){
                    Toast.makeText(MainActivity.this,"Amount is saved with Item detail", Toast.LENGTH_LONG).show();
                }else {
                    Toast.makeText(MainActivity.this, "Error occurred : Detailed are not saved", Toast.LENGTH_LONG).show();
                }
            }
        });
    }


}
我将感谢你的帮助。
谢谢

它可能会崩溃,因为它没有创建表:

String createTable = "CREATE TABLE" + TABLE_NAME + "(ID INTEGER PRIMARY KEY AUTOINCREMENT," + "ITEM TEXT, AMOUNT TEXT)";
表与其名称之间缺少空格:

String createTable = "CREATE TABLE " + TABLE_NAME + "(ID INTEGER PRIMARY KEY AUTOINCREMENT, ITEM TEXT, AMOUNT TEXT)";
在db.insert中获取数据后,还应关闭数据库,但这只会创建一个警告:

long result = db.insert(TABLE_NAME,null, contentValues);
db.close();

如果你的应用程序失败了,那么编辑你的帖子,你收到的错误,这样我们就可以从堆栈中确定原因。遇到错误时,您应该使用调试和堆栈跟踪来帮助解决问题。您将在logcat中找到错误。请编辑您的帖子,将特定错误包含在此处。谢谢。我的问题已经解决。我感谢您的帮助