Java 我正在使用我的android手机和API 15作为测试设备。我试着运行这个应用程序,它';在我的设备上运行后立即停止';它满了

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

这相当简单。我正在尝试学习如何为android应用程序建立sqlite连接。 我正在使用Android Studio编写代码。当我尝试在我的测试设备(API 15的Android手机)上加载应用程序时,一个白色屏幕闪烁,一个警告框弹出,说“LearnDB已停止工作”

请告诉我哪里出了问题

重要提示-请尝试解释应如何准确地建立sqlite连接,以及在执行相同操作时应牢记哪些规则。 在使用sqlite for android时,请随时告诉我任何良好的编程实践

这是我的MainActivity.java文件

    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);
    
  • 您需要删除恰好在openorCreateDatabase()之后编写的以下行

  • 写这个

    db.execSQL(CREATE_DB_TABLE);
    
    而不是

    db.execSQL(DB_TABLE);
    
  • 获取一个上下文并编写以下代码

    public Context context;
    db = context.openOrCreateDatabase("scoreDb.db", Context.MODE_PRIVATE, null);
    
  • 您需要删除恰好在openorCreateDatabase()之后编写的以下行

  • 写这个

    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()之后写入。