我是Android编程的新手,我很难插入数据。当我提交表单时,app force会关闭,提示错误" App not Responding"
我创建了一个名为DB_Controller
package com.techdepot_ph.maco.secretjournal;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.text.Editable;
import android.widget.TextView;
import java.text.SimpleDateFormat;
import java.util.Calendar;
/**
* Created by Maco on 18-Jan-17.
*/
public class DB_Controller extends SQLiteOpenHelper {
public DB_Controller(Context context) {
super(context, "app.db", null, 1);
}
//This creates the database
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE STORIES( " +
"id INTEGER PRIMARY KEY AUTOINCREMENT, " +
"uniq_id TEXT, " +
"title TEXT, " +
"body TEXT, " +
"is_private INT, '" +
"dev_id TEXT, " +
"user_id TEXT, " +
"date_time TEXT)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS STORIES");
onCreate(db);
}
//This inserts the Data in the Database
public void insert_story(String story_title, String story_body) {
ContentValues content = new ContentValues();
content.put("title", story_title);
content.put("body", story_body);
this.getWritableDatabase().insertOrThrow("STORIES", "", content);
}
在我的Activity类
中package com.techdepot_ph.maco.secretjournal;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Switch;
import android.widget.Toast;
public class StoryCreate_Activity extends AppCompatActivity {
DB_Controller db;
EditText story_title, story_body;
//Switch is_private;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_story_create_);
story_title = (EditText) findViewById(R.id.story_title);
story_body = (EditText) findViewById(R.id.story_body);
//is_private = (Switch) findViewById(R.id.story_private);
}
public void btn_click(View view) {
db = new DB_Controller(this);
switch(view.getId()) {
case R.id.story_submit:
db.insert_story(story_title.getText().toString(), story_body.getText().toString());
Toast.makeText(StoryCreate_Activity.this, "Data Saved!", Toast.LENGTH_LONG).show();
break;
}
}
}
在我的布局中,我定义了按钮R.id.story_submit
来调用btn_click()
onClick。
答案 0 :(得分:3)
这是创建表查询中的问题。
<强>此前:强>
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE STORIES( " +
"id INTEGER PRIMARY KEY AUTOINCREMENT, " +
"uniq_id TEXT, " +
"title TEXT, " +
"body TEXT, " +
"is_private INT, '" +
"dev_id TEXT, " +
"user_id TEXT, " +
"date_time TEXT)");
}
更新至:
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE STORIES( " +
"id INTEGER PRIMARY KEY AUTOINCREMENT, " +
"uniq_id TEXT, " +
"title TEXT, " +
"body TEXT, " +
"is_private INTEGER, " +
"dev_id TEXT, " +
"user_id TEXT, " +
"date_time TEXT)");
}
答案 1 :(得分:1)
更新:
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE STORIES( " +
"id INTEGER PRIMARY KEY AUTOINCREMENT, " +
"uniq_id TEXT, " +
"title TEXT, " +
"body TEXT, " +
"is_private INTEGER, " +
"dev_id TEXT, " +
"user_id TEXT, " +
"date_time TEXT)");
}
答案 2 :(得分:0)
我认为你应该在后台线程上调用插入数据到数据库,而不是直接在主线程上调用。你可以使用Thread,AsyncStack来做到这一点。
答案 3 :(得分:0)
您的应用程序代码可能存在许多不同的问题,您需要在底部提交生成的错误日志以了解ANR(应用程序无响应)错误的原因如果应用程序在5秒内没有响应,请关闭它。
查看您的代码,您只有2个字段需要插入数据库story_title,story_body,其余字段是冗余的,除了_id是一个自动递增的密钥。
通过浏览你的应用程序我可以找到一些东西:
因此,即使在修复此问题时,您仍可能遇到错误,如果没有日志我们无法进一步指出,我创建了一个类似的应用程序,可以帮助您了解如何在Android中处理数据库{{3 }}
此应用程序不运行后台任务,最好是在不同的线程上处理数据库,但为了详细说明,这肯定会有所帮助。