Java 我正在使用我的android手机和API 15作为测试设备。我试着运行这个应用程序,它';在我的设备上运行后立即停止';它满了
这相当简单。我正在尝试学习如何为android应用程序建立sqlite连接。 我正在使用Android Studio编写代码。当我尝试在我的测试设备(API 15的Android手机)上加载应用程序时,一个白色屏幕闪烁,一个警告框弹出,说“LearnDB已停止工作” 请告诉我哪里出了问题 重要提示-请尝试解释应如何准确地建立sqlite连接,以及在执行相同操作时应牢记哪些规则。 在使用sqlite for android时,请随时告诉我任何良好的编程实践 这是我的MainActivity.java文件Java 我正在使用我的android手机和API 15作为测试设备。我试着运行这个应用程序,它';在我的设备上运行后立即停止';它满了,java,android,sqlite,runtime-error,Java,Android,Sqlite,Runtime Error,这相当简单。我正在尝试学习如何为android应用程序建立sqlite连接。 我正在使用Android Studio编写代码。当我尝试在我的测试设备(API 15的Android手机)上加载应用程序时,一个白色屏幕闪烁,一个警告框弹出,说“LearnDB已停止工作” 请告诉我哪里出了问题 重要提示-请尝试解释应如何准确地建立sqlite连接,以及在执行相同操作时应牢记哪些规则。 在使用sqlite for android时,请随时告诉我任何良好的编程实践 这是我的MainActivity.jav
package com.example.summer.learndb;
import android.database.sqlite.SQLiteDatabase;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity {
private SQLiteDatabase db ;
public static final String DB_NAME = "scoreDb.db";
public static final int DB_VERSION = 1;
public static final String CREATE_DB_TABLE = "CREATE TABLE IF NOT EXISTS scoreTable (score1 INTEGER, score2 INTEGER);";
public static final String DB_TABLE = "scoreTable";
Button b1= (Button) findViewById(R.id.button1);
Button b2 = (Button) findViewById(R.id.button2);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
db = openOrCreateDatabase(DB_NAME, SQLiteDatabase.CREATE_IF_NECESSARY,null);
db.close();
try{
db.execSQL(DB_TABLE);
db.close();
Toast.makeText(getBaseContext(),"Table created!!!",Toast.LENGTH_LONG).show();
}
catch(Exception e){
Toast.makeText(getBaseContext(),"ERROR!!!!", Toast.LENGTH_LONG).show();
}
b1.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
}
});
b2.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
}
});
}
}
这是我的activity_main.xml文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context=".MainActivity">
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="add"
android:id="@+id/button1" />
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="show"
android:id="@+id/button2" />
</LinearLayout>
public Context context;
db = context.openOrCreateDatabase("scoreDb.db", Context.MODE_PRIVATE, null);
db.execSQL(CREATE_DB_TABLE);
而不是
db.execSQL(DB_TABLE);
public Context context;
db = context.openOrCreateDatabase("scoreDb.db", Context.MODE_PRIVATE, null);
db.execSQL(CREATE_DB_TABLE);
而不是
db.execSQL(DB_TABLE);
拉姆·曼萨瓦拉绝对是赖特,但我认为你还有另一个问题。您的db.execSQL位于try-catch中,因此它不会导致崩溃。您所做的是在setContentView之前初始化按钮。这是一个问题,因为系统无法找到它们。这样做:
public class MainActivity extends Activity {
private SQLiteDatabase db ;
public static final String DB_NAME = "scoreDb.db";
public static final int DB_VERSION = 1;
public static final String CREATE_DB_TABLE = "CREATE TABLE IF NOT EXISTS scoreTable (score1 INTEGER, score2 INTEGER);";
public static final String DB_TABLE = "scoreTable";
Button b1;
Button b2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b1 = (Button) findViewById(R.id.button1);
b2 = (Button) findViewById(R.id.button2);
db = openOrCreateDatabase(DB_NAME, SQLiteDatabase.CREATE_IF_NECESSARY,null);
.
.
.
etc
在setContentView()之后初始化按钮
编辑
解释sqlite应该如何实现超出了这里的范围,但这里有一些很好的教程:
拉姆·曼萨瓦拉绝对是赖特,但我认为你还有另一个问题。您的db.execSQL位于try-catch中,因此它不会导致崩溃。您所做的是在setContentView之前初始化按钮。这是一个问题,因为系统无法找到它们。这样做:
public class MainActivity extends Activity {
private SQLiteDatabase db ;
public static final String DB_NAME = "scoreDb.db";
public static final int DB_VERSION = 1;
public static final String CREATE_DB_TABLE = "CREATE TABLE IF NOT EXISTS scoreTable (score1 INTEGER, score2 INTEGER);";
public static final String DB_TABLE = "scoreTable";
Button b1;
Button b2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b1 = (Button) findViewById(R.id.button1);
b2 = (Button) findViewById(R.id.button2);
db = openOrCreateDatabase(DB_NAME, SQLiteDatabase.CREATE_IF_NECESSARY,null);
.
.
.
etc
在setContentView()之后初始化按钮
编辑
解释sqlite应该如何实现超出了这里的范围,但这里有一些很好的教程:
我们会张贴日志。在那里,您将发现问题所在。有一件事是错误的,您调用db.close();在创建数据库之后,然后您想要执行一个sql…接下来的事情是,您给了您的按钮id button1,这不是一个好主意。请注意,您使用了正确的R导入,button1是button的内部id,如果您导入了错误的R.(android.R.),那么您引用了错误的布局……但是无论如何,请发布日志猫,否则没有人知道问题……我们发布日志猫。在那里,您将发现问题所在。有一件事是错误的,您调用db.close();在创建数据库之后,然后您想要执行一个sql…接下来的事情是,您给了您的按钮id button1,这不是一个好主意。请注意,您使用了正确的R导入,button1是button的内部id,如果您导入了错误的R.(android.R.),那么您引用了错误的布局…但是无论如何,发布日志,否则没有人知道问题…正确,但我认为异常是由于另一个错误引发的。execSQL在try/catch中,因此它将被捕获,这可能不是崩溃的原因。正确,但我认为引发异常是因为另一个错误。execSQL在try/catch中,因此它将被捕获,这可能不是崩溃的原因。是的,我同意。它必须写在setContentView()之后。是的,我同意。它必须在setContentView()之后写入。