麻烦实施数据库导入Android项目 [英] Trouble implementing database into android project

查看:181
本文介绍了麻烦实施数据库导入Android项目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在关注指南在Android项目实施的数据库。

这是code为我DBAdapter类:

 包com.sab.namespace;进口android.content.ContentValues​​;
进口android.content.Context;
进口android.database.Cursor;
进口android.database.SQLException;
进口android.database.sqlite.SQLiteDatabase;
进口android.database.sqlite.SQLiteOpenHelper;
进口android.util.Log;公共类DBAdapter
{
    公共静态最后弦乐KEY_ROWID =_id;
    公共静态最后弦乐KEY_PROPERTYID =物业ID;
    公共静态最后弦乐KEY_ADDRESS =propertyaddress;
    公共静态最后弦乐KEY_JOBNO =jobnumber可以;
    公共静态最后弦乐KEY_ASSIGNED =assignedto;
    公共静态最后弦乐KEY_COMPANY =公司;
    公共静态最后弦乐KEY_DATE =dateCreated会;
    公共静态最后弦乐KEY_MASTERKEY =usemasterkey;
    公共静态最后弦乐KEY_PHONEBEFORE =phonebefore;
    公共静态最后弦乐KEY_PROBLEM =descriptionofproblem;
    私有静态最后弦乐TAG =DBAdapter;    私有静态最后弦乐DATABASE_NAME =SABDatabase;
    私有静态最后弦乐DATABASE_TABLE =工作;
    私有静态最终诠释DATABASE_VERSION = 1;    私有静态最后弦乐DATABASE_CREATE =
        创造就业岗位表(_id整数主键自动增量
        +物业ID文本不为空,propertyaddress文本不为空,
        +jobnumber可以文本不为​​空,assignedto文本不为空,
        +公司文本不为空的话,dateCreated文本不为空,
        +usemasterkey文本不为空,phonebefore文本不为空,
        +descriptionofproblem文字NOT NULL);;    私人最终上下文的背景下;    私人DatabaseHelper DBHelper;
    私人SQLiteDatabase分贝;    公共DBAdapter(上下文CTX)
    {
        this.context = CTX;
        DBHelper =新DatabaseHelper(背景);
    }    私有静态类DatabaseHelper扩展SQLiteOpenHelper
    {
        DatabaseHelper(上下文的背景下)
        {
            超(背景下,DATABASE_NAME,空,DATABASE_VERSION);
        }        @覆盖
        公共无效的onCreate(SQLiteDatabase DB)
        {
            db.execSQL(DATABASE_CREATE);
        }        @覆盖
        公共无效onUpgrade(SQLiteDatabase分贝,INT oldVersion,
                              INT静态网页)
        {
            Log.w(TAG,从版本升级数据库+ oldVersion
                  +至
                  + NEWVERSION +,这将摧毁所有旧数据);
            db.execSQL(DROP TABLE IF EXISTS就业);
            的onCreate(DB);
        }
    }  // ---打开数据库---
    公共DBAdapter的open()抛出的SQLException
    {
        DB = DBHelper.getWritableDatabase();
        返回此;
    }    // ---关闭数据库---
    公共无效的close()
    {
        DBHelper.close();
    }
    // ---插入一个工作到数据库---
    众长insertJob(字符串物业ID,字符串propertyaddress,字符串jobnumber可以,
            字符串assignedto,公司的字符串,字符串dateCreated,字符串usemasterkey,
            字符串phonebefore,字符串descriptionofproblem)
    {
        ContentValues​​ initialValues​​ =新ContentValues​​();
        initialValues​​.put(KEY_PROPERTYID,物业ID);
        initialValues​​.put(KEY_ADDRESS,propertyaddress);
        initialValues​​.put(KEY_JOBNO,jobnumber可以);
        initialValues​​.put(KEY_ASSIGNED,assignedto);
        initialValues​​.put(KEY_COMPANY,公司);
        initialValues​​.put(KEY_DATE,dateCreated会);
        initialValues​​.put(KEY_MASTERKEY,usemasterkey);
        initialValues​​.put(KEY_PHONEBEFORE,phonebefore);
        initialValues​​.put(KEY_PROBLEM,descriptionofproblem);
        返回db.insert(DATABASE_TABLE,空,initialValues​​);
    }    // ---删除某项工作---
    公共布尔deleteJob(长ROWID)
    {
        返回db.delete(DATABASE_TABLE,KEY_ROWID +=+ ROWID,NULL)> 0;
    }    // ---检索所有的工作---
    公共光标getAllJobs()
    {
        返回db.query(DATABASE_TABLE,新的String [] {
                KEY_ROWID,
                KEY_PROPERTYID,
                KEY_ADDRESS,
                KEY_JOBNO,
                KEY_ASSIGNED,
                KEY_COMPANY,
                KEY_DATE,
                KEY_MASTERKEY,
                KEY_PHONEBEFORE,
                KEY_PROBLEM},
                空值,
                空值,
                空值,
                空值,
                空值);
    }
    // ---检索特定的工作---
    公共光标getJob(长ROWID)抛出的SQLException
    {
        光标mCursor =
                db.query(真,DATABASE_TABLE,新的String [] {
                        KEY_ROWID,
                        KEY_PROPERTYID,
                        KEY_ADDRESS,
                        KEY_JOBNO,
                        KEY_ASSIGNED,
                        KEY_COMPANY,
                        KEY_DATE,
                        KEY_MASTERKEY,
                        KEY_PHONEBEFORE,
                        KEY_PROBLEM},
                        KEY_ROWID +=+ ROWID,
                        空值,
                        空值,
                        空值,
                        空值,
                        空值);
        如果(mCursor!= NULL){
            mCursor.moveToFirst();
        }
        返回mCursor;
    }    // ---更新工作---
    公共布尔updateJob(长ROWID,字符串物业ID,字符串propertyaddress,字符串jobnumber可以,
            字符串assignedto,公司的字符串,字符串dateCreated,字符串usemasterkey,
            字符串phonebefore,字符串descriptionofproblem)
    {
        ContentValues​​ ARGS =新ContentValues​​();
        args.put(KEY_PROPERTYID,物业ID);
        args.put(KEY_ADDRESS,propertyaddress);
        args.put(KEY_JOBNO,jobnumber可以);
        args.put(KEY_ASSIGNED,assignedto);
        args.put(KEY_COMPANY,公司);
        args.put(KEY_DATE,dateCreated会);
        args.put(KEY_MASTERKEY,usemasterkey);
        args.put(KEY_PHONEBEFORE,phonebefore);
        args.put(KEY_PROBLEM,descriptionofproblem);
        返回db.update(DATABASE_TABLE,ARGS,
                         KEY_ROWID +=+ ROWID,NULL)> 0;
    }
}

然后我尝试在我的ViewJobs.java类使用的数据库

  DBAdapter DB =新DBAdapter(本);
        db.open();
        长ID;
        ID = db.insertJob(
                PROP121
                MARK ANDREWS DRIVE
                JOB32
                科林
                SAB
                13年12月4日
                是,
                是,
                SHIT无处不在);
        ID = db.insertJob(
                PROP122
                FAULTY CLOSE,
                JOB33
                DAVE
                SAB
                13/4/13
                是,
                是,
                修复PLEASE);
        db.close();
        Toast.makeText(此,Long.toString(ID),Toast.LENGTH_LONG).show();

吐司输出-1,这告诉我出现了误差输入数据,但我找不到在哪里我已经错了。

如果我只是忽略错误并继续与下面code,那么我的应用程序崩溃。

  db.open();
        光标C = db.getAllJobs();
        db.close();

我将非常感激,如果任何人都可以提供任何意见!

-Harry

下面是logcat的code代表时崩溃:

  18 03-04:37:59.760:W / dalvikvm(2078):主题ID = 1:螺纹未捕获的异常(组= 0x409c01f8)退出
03-04 18:37:59.809:I / dalvikvm(2078):主题ID = 3:反应信号3
03-04 18:37:59.958:E / AndroidRuntime(2078):致命异常:主要
03-04 18:37:59.958:E / AndroidRuntime(2078):了java.lang.RuntimeException:无法启动活动ComponentInfo {com.sab.namespace / com.sab.namespace.ViewJobs}:android.database.sqlite.SQLiteException :没有这样的表:工作:,在编译:选择_id,物业ID,propertyaddress,jobnumber可以,assignedto,公司的话,dateCreated,usemasterkey,phonebefore,descriptionofproblem乔布斯
03-04 18:37:59.958:E / AndroidRuntime(2078):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
03-04 18:37:59.958:E / AndroidRuntime(2078):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
03-04 18:37:59.958:E / AndroidRuntime(2078):在android.app.ActivityThread.access $ 600(ActivityThread.java:123)
03-04 18:37:59.958:E / AndroidRuntime(2078):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1147)
03-04 18:37:59.958:E / AndroidRuntime(2078):在android.os.Handler.dispatchMessage(Handler.java:99)
03-04 18:37:59.958:E / AndroidRuntime(2078):在android.os.Looper.loop(Looper.java:137)
03-04 18:37:59.958:E / AndroidRuntime(2078):在android.app.ActivityThread.main(ActivityThread.java:4424)
03-04 18:37:59.958:E / AndroidRuntime(2078):在java.lang.reflect.Method.invokeNative(本机方法)
03-04 18:37:59.958:E / AndroidRuntime(2078):在java.lang.reflect.Method.invoke(Method.java:511)
03-04 18:37:59.958:E / AndroidRuntime(2078):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:784)
03-04 18:37:59.958:E / AndroidRuntime(2078):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
03-04 18:37:59.958:E / AndroidRuntime(2078):在dalvik.system.NativeStart.main(本机方法)
03-04 18:37:59.958:E / AndroidRuntime(2078):android.database.sqlite.SQLiteException:由没有造成这样的表:工作:,在编译:选择_id,物业ID,propertyaddress,jobnumber可以,assignedto,公司, dateCreated会,usemasterkey,phonebefore,descriptionofproblem乔布斯
03-04 18:37:59.958:E / AndroidRuntime(2078):在android.database.sqlite.SQLiteCompiledSql.native_compile(本机方法)
03-04 18:37:59.958:E / AndroidRuntime(2078):在android.database.sqlite.SQLiteCompiledSql<&初始化GT;(SQLiteCompiledSql.java:68)
03-04 18:37:59.958:E / AndroidRuntime(2078):在android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java:143)
03-04 18:37:59.958:E / AndroidRuntime(2078):在android.database.sqlite.SQLiteProgram.compileAndbindAllArgs(SQLiteProgram.java:361)
03-04 18:37:59.958:E / AndroidRuntime(2078):在android.database.sqlite.SQLiteProgram<&初始化GT;(SQLiteProgram.java:127)
03-04 18:37:59.958:E / AndroidRuntime(2078):在android.database.sqlite.SQLiteProgram<&初始化GT;(SQLiteProgram.java:94)
03-04 18:37:59.958:E / AndroidRuntime(2078):在android.database.sqlite.SQLiteQuery<&初始化GT;(SQLiteQuery.java:53)
03-04 18:37:59.958:E / AndroidRuntime(2078):在android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:47)
03-04 18:37:59.958:E / AndroidRuntime(2078):在android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1564)
03-04 18:37:59.958:E / AndroidRuntime(2078):在android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1449)
03-04 18:37:59.958:E / AndroidRuntime(2078):在android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1405)
03-04 18:37:59.958:E / AndroidRuntime(2078):在android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1485)
03-04 18:37:59.958:E / AndroidRuntime(2078):在com.sab.namespace.DBAdapter.getAllJobs(DBAdapter.java:114)
03-04 18:37:59.958:E / AndroidRuntime(2078):在com.sab.namespace.ViewJobs.onCreate(ViewJobs.java:52)
03-04 18:37:59.958:E / AndroidRuntime(2078):在android.app.Activity.performCreate(Activity.java:4465)
03-04 18:37:59.958:E / AndroidRuntime(2078):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
03-04 18:37:59.958:E / AndroidRuntime(2078):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
03-04 18:37:59.958:E / AndroidRuntime(2078):11 ...更多
03-04 18:37:59.969:I / dalvikvm(2078):写的堆栈跟踪到/data/anr/traces.txt
03-04 18:38:00.3​​28:I / dalvikvm(2078):主题ID = 3:反应信号3
03-04 18:38:00.3​​58:I / dalvikvm(2078):写的堆栈跟踪到/data/anr/traces.txt
03-04 18:38:00.658:I / dalvikvm(2078):主题ID = 3:反应信号3
03-04 18:38:00.799:I / dalvikvm(2078):写的堆栈跟踪到/data/anr/traces.txt
03-04 18:38:03.210:I /流程(2078):发送信号。 PID:2078 SIG:9

下面是完整的code为ViewJobs.java

 包com.sab.namespace;进口android.app.Activity;
进口android.database.Cursor;
进口android.os.Bundle;
进口android.view.View;
进口android.widget.AdapterView;
进口android.widget.AdapterView.OnItemClickListener;
进口android.widget.ArrayAdapter;
进口android.widget.ListView;
进口android.widget.Toast;公共类ViewJobs延伸活动{    字符串标题[] = {\"hello\",\"bannana\",\"frogshehe\",\"hello\",\"bannana\",\"frogshehe\",\"hello\",\"bannana\",\"frogshehe\",\"hello\",\"bannana\",\"frogshehe\",\"hello\",\"bannana\",\"frogshehe\"};
    ListView的vListView;
    ArrayAdapter<串GT; lVAAdapter;    @覆盖
    公共无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.view);        //数据库的东西
        DBAdapter DB =新DBAdapter(本);
        db.open();
        长ID;
        ID = db.insertJob(
                PROP121
                MARK ANDREWS DRIVE
                JOB32
                科林
                SAB
                13年12月4日
                是,
                是,
                SHIT无处不在);
        ID = db.insertJob(
                PROP122
                FAULTY CLOSE,
                JOB33
                DAVE
                SAB
                13/4/13
                是,
                是,
                修复PLEASE);
        db.close();
        Toast.makeText(此,Long.toString(ID),Toast.LENGTH_LONG).show();        db.open();
        光标C = db.getAllJobs();
        db.close();
        / *
        如果(c.moveToFirst())
        {
            做{
                DisplayJob(C);
            }而(c.moveToNext());
        }
        db.close();
        * /      //创建列表
        vListView =(ListView控件)findViewById(R.id.vlistview);
        lVAAdapter =新ArrayAdapter<串GT;(ViewJobs.this,
                android.R.layout.simple_list_item_1,职称);        //创建侦听
        vListView.setAdapter(lVAAdapter);
        vListView.setOnItemClickListener(新OnItemClickListener(){
            公共无效onItemClick(适配器视图<> lVAAdapter,查看MyView的,
                    INT myItemInt,长mylng){
                    字符串selectedFromList =(字符串)(vListView.getItemAtPosition(myItemInt));
                    如果(标题[myItemInt] ==​​你好){
                        标题[2] =测试;
                        vListView.invalidateViews();
                    }
            }
        });
    }    公共无效DisplayJob(光标C)
    {
        Toast.makeText(这一点,
                ID:+ c.getString(0)+\\ N+
                物业ID:+ c.getString(1)+\\ n+
                propertyaddress:+ c.getString(2)+\\ N+
                jobnumber可以:+ c.getString(3)+\\ n+
                assignedto:+ c.getString(4)+\\ n+
                公司:+ c.getString(5)+\\ n+
                dateCreated会:+ c.getString(6)+\\ n+
                usemasterkey:+ c.getString(7)+\\ n+
                phonebefore:+ c.getString(8)+\\ n+
                descriptionofproblem:+ c.getString(9),
                Toast.LENGTH_LONG).show();
    }
}


解决方案

您可能创建数据库之后添加的工作表。该的onCreate就不叫。所以,你需要明确的的onCreate重新调用的数据。

I've been following This guide for implementing a database in an android project.

This is the code for my DBAdapter class:

package com.sab.namespace;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DBAdapter
{
    public static final String KEY_ROWID = "_id";
    public static final String KEY_PROPERTYID = "propertyid";
    public static final String KEY_ADDRESS = "propertyaddress";
    public static final String KEY_JOBNO = "jobnumber";  
    public static final String KEY_ASSIGNED = "assignedto";
    public static final String KEY_COMPANY = "company";
    public static final String KEY_DATE = "datecreated";
    public static final String KEY_MASTERKEY = "usemasterkey"; 
    public static final String KEY_PHONEBEFORE = "phonebefore";
    public static final String KEY_PROBLEM = "descriptionofproblem";
    private static final String TAG = "DBAdapter";

    private static final String DATABASE_NAME = "SABDatabase";
    private static final String DATABASE_TABLE = "jobs";
    private static final int DATABASE_VERSION = 1;

    private static final String DATABASE_CREATE =
        "create table jobs (_id integer primary key autoincrement, "
        + "propertyid text not null, propertyaddress text not null, "
        + "jobnumber text not null, assignedto text not null, "
        + "company text not null, datecreated text not null, "
        + "usemasterkey text not null, phonebefore text not null, "
        + "descriptionofproblem text not null);";

    private final Context context; 

    private DatabaseHelper DBHelper;
    private SQLiteDatabase db;

    public DBAdapter(Context ctx) 
    {
        this.context = ctx;
        DBHelper = new DatabaseHelper(context);
    }

    private static class DatabaseHelper extends SQLiteOpenHelper 
    {
        DatabaseHelper(Context context) 
        {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase db) 
        {
            db.execSQL(DATABASE_CREATE);
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, 
                              int newVersion) 
        {
            Log.w(TAG, "Upgrading database from version " + oldVersion 
                  + " to "
                  + newVersion + ", which will destroy all old data");
            db.execSQL("DROP TABLE IF EXISTS jobs");
            onCreate(db);
        }
    } 

  //---opens the database---
    public DBAdapter open() throws SQLException 
    {
        db = DBHelper.getWritableDatabase();
        return this;
    }

    //---closes the database---    
    public void close() 
    {
        DBHelper.close();
    }


    //---insert a job into the database---
    public long insertJob(String propertyid, String propertyaddress, String jobnumber,
            String assignedto, String company, String datecreated, String usemasterkey,
            String phonebefore, String descriptionofproblem) 
    {
        ContentValues initialValues = new ContentValues();
        initialValues.put(KEY_PROPERTYID, propertyid);
        initialValues.put(KEY_ADDRESS, propertyaddress);
        initialValues.put(KEY_JOBNO, jobnumber);
        initialValues.put(KEY_ASSIGNED, assignedto);
        initialValues.put(KEY_COMPANY, company);
        initialValues.put(KEY_DATE, datecreated);
        initialValues.put(KEY_MASTERKEY, usemasterkey);
        initialValues.put(KEY_PHONEBEFORE, phonebefore);
        initialValues.put(KEY_PROBLEM, descriptionofproblem);
        return db.insert(DATABASE_TABLE, null, initialValues);
    }

    //---deletes a particular job---
    public boolean deleteJob(long rowId) 
    {
        return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
    }

    //---retrieves all the jobs---
    public Cursor getAllJobs() 
    {
        return db.query(DATABASE_TABLE, new String[] {
                KEY_ROWID, 
                KEY_PROPERTYID,
                KEY_ADDRESS,
                KEY_JOBNO,
                KEY_ASSIGNED,
                KEY_COMPANY,
                KEY_DATE,
                KEY_MASTERKEY,
                KEY_PHONEBEFORE,
                KEY_PROBLEM}, 
                null, 
                null, 
                null, 
                null, 
                null);
    }


    //---retrieves a particular job---
    public Cursor getJob(long rowId) throws SQLException 
    {
        Cursor mCursor =
                db.query(true, DATABASE_TABLE, new String[] {
                        KEY_ROWID, 
                        KEY_PROPERTYID,
                        KEY_ADDRESS,
                        KEY_JOBNO,
                        KEY_ASSIGNED,
                        KEY_COMPANY,
                        KEY_DATE,
                        KEY_MASTERKEY,
                        KEY_PHONEBEFORE,
                        KEY_PROBLEM}, 
                        KEY_ROWID + "=" + rowId, 
                        null,
                        null, 
                        null, 
                        null, 
                        null);
        if (mCursor != null) {
            mCursor.moveToFirst();
        }
        return mCursor;
    }

    //---updates a job---
    public boolean updateJob(long rowId, String propertyid, String propertyaddress, String jobnumber,
            String assignedto, String company, String datecreated, String usemasterkey,
            String phonebefore, String descriptionofproblem)
    {
        ContentValues args = new ContentValues();
        args.put(KEY_PROPERTYID, propertyid);
        args.put(KEY_ADDRESS, propertyaddress);
        args.put(KEY_JOBNO, jobnumber);
        args.put(KEY_ASSIGNED, assignedto);
        args.put(KEY_COMPANY, company);
        args.put(KEY_DATE, datecreated);
        args.put(KEY_MASTERKEY, usemasterkey);
        args.put(KEY_PHONEBEFORE, phonebefore);
        args.put(KEY_PROBLEM, descriptionofproblem);
        return db.update(DATABASE_TABLE, args, 
                         KEY_ROWID + "=" + rowId, null) > 0;
    }
}

And then I try to use the database in my ViewJobs.java class

DBAdapter db = new DBAdapter(this);
        db.open();        
        long id;
        id = db.insertJob(
                "PROP121",
                "MARK ANDREWS DRIVE",
                "JOB32",
                "COLIN",
                "SAB",
                "12/4/13",
                "yes",
                "yes",
                "SHIT IS EVERYWHERE");
        id = db.insertJob(
                "PROP122",
                "FAULTY CLOSE",
                "JOB33",
                "DAVE",
                "SAB",
                "13/4/13",
                "yes",
                "yes",
                "FIX PLEASE");
        db.close();
        Toast.makeText(this, Long.toString(id), Toast.LENGTH_LONG).show();

Toast outputs -1 which tells me there has been an error with inputting the data but I can't find where I've gone wrong.

If I just ignore the error and continue on with the following code then my application crashes.

db.open();
        Cursor c = db.getAllJobs();
        db.close();

I would be very grateful if anyone could offer any advice!

-Harry

Here is the logcat code for when it crashes:

03-04 18:37:59.760: W/dalvikvm(2078): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
03-04 18:37:59.809: I/dalvikvm(2078): threadid=3: reacting to signal 3
03-04 18:37:59.958: E/AndroidRuntime(2078): FATAL EXCEPTION: main
03-04 18:37:59.958: E/AndroidRuntime(2078): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.sab.namespace/com.sab.namespace.ViewJobs}: android.database.sqlite.SQLiteException: no such table: jobs: , while compiling: SELECT _id, propertyid, propertyaddress, jobnumber, assignedto, company, datecreated, usemasterkey, phonebefore, descriptionofproblem FROM jobs
03-04 18:37:59.958: E/AndroidRuntime(2078):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
03-04 18:37:59.958: E/AndroidRuntime(2078):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
03-04 18:37:59.958: E/AndroidRuntime(2078):     at android.app.ActivityThread.access$600(ActivityThread.java:123)
03-04 18:37:59.958: E/AndroidRuntime(2078):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
03-04 18:37:59.958: E/AndroidRuntime(2078):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-04 18:37:59.958: E/AndroidRuntime(2078):     at android.os.Looper.loop(Looper.java:137)
03-04 18:37:59.958: E/AndroidRuntime(2078):     at android.app.ActivityThread.main(ActivityThread.java:4424)
03-04 18:37:59.958: E/AndroidRuntime(2078):     at java.lang.reflect.Method.invokeNative(Native Method)
03-04 18:37:59.958: E/AndroidRuntime(2078):     at java.lang.reflect.Method.invoke(Method.java:511)
03-04 18:37:59.958: E/AndroidRuntime(2078):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
03-04 18:37:59.958: E/AndroidRuntime(2078):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
03-04 18:37:59.958: E/AndroidRuntime(2078):     at dalvik.system.NativeStart.main(Native Method)
03-04 18:37:59.958: E/AndroidRuntime(2078): Caused by: android.database.sqlite.SQLiteException: no such table: jobs: , while compiling: SELECT _id, propertyid, propertyaddress, jobnumber, assignedto, company, datecreated, usemasterkey, phonebefore, descriptionofproblem FROM jobs
03-04 18:37:59.958: E/AndroidRuntime(2078):     at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
03-04 18:37:59.958: E/AndroidRuntime(2078):     at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:68)
03-04 18:37:59.958: E/AndroidRuntime(2078):     at android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java:143)
03-04 18:37:59.958: E/AndroidRuntime(2078):     at android.database.sqlite.SQLiteProgram.compileAndbindAllArgs(SQLiteProgram.java:361)
03-04 18:37:59.958: E/AndroidRuntime(2078):     at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:127)
03-04 18:37:59.958: E/AndroidRuntime(2078):     at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:94)
03-04 18:37:59.958: E/AndroidRuntime(2078):     at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:53)
03-04 18:37:59.958: E/AndroidRuntime(2078):     at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:47)
03-04 18:37:59.958: E/AndroidRuntime(2078):     at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1564)
03-04 18:37:59.958: E/AndroidRuntime(2078):     at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1449)
03-04 18:37:59.958: E/AndroidRuntime(2078):     at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1405)
03-04 18:37:59.958: E/AndroidRuntime(2078):     at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1485)
03-04 18:37:59.958: E/AndroidRuntime(2078):     at com.sab.namespace.DBAdapter.getAllJobs(DBAdapter.java:114)
03-04 18:37:59.958: E/AndroidRuntime(2078):     at com.sab.namespace.ViewJobs.onCreate(ViewJobs.java:52)
03-04 18:37:59.958: E/AndroidRuntime(2078):     at android.app.Activity.performCreate(Activity.java:4465)
03-04 18:37:59.958: E/AndroidRuntime(2078):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
03-04 18:37:59.958: E/AndroidRuntime(2078):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
03-04 18:37:59.958: E/AndroidRuntime(2078):     ... 11 more
03-04 18:37:59.969: I/dalvikvm(2078): Wrote stack traces to '/data/anr/traces.txt'
03-04 18:38:00.328: I/dalvikvm(2078): threadid=3: reacting to signal 3
03-04 18:38:00.358: I/dalvikvm(2078): Wrote stack traces to '/data/anr/traces.txt'
03-04 18:38:00.658: I/dalvikvm(2078): threadid=3: reacting to signal 3
03-04 18:38:00.799: I/dalvikvm(2078): Wrote stack traces to '/data/anr/traces.txt'
03-04 18:38:03.210: I/Process(2078): Sending signal. PID: 2078 SIG: 9

Here is the full code for ViewJobs.java

package com.sab.namespace;

import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class ViewJobs extends Activity {

    String titles[] = {"hello","bannana","frogshehe","hello","bannana","frogshehe","hello","bannana","frogshehe","hello","bannana","frogshehe","hello","bannana","frogshehe"};
    ListView vListView;
    ArrayAdapter<String> lVAAdapter;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.view);

        //database stuff
        DBAdapter db = new DBAdapter(this);
        db.open();        
        long id;
        id = db.insertJob(
                "PROP121",
                "MARK ANDREWS DRIVE",
                "JOB32",
                "COLIN",
                "SAB",
                "12/4/13",
                "yes",
                "yes",
                "SHIT IS EVERYWHERE");
        id = db.insertJob(
                "PROP122",
                "FAULTY CLOSE",
                "JOB33",
                "DAVE",
                "SAB",
                "13/4/13",
                "yes",
                "yes",
                "FIX PLEASE");
        db.close();
        Toast.makeText(this, Long.toString(id), Toast.LENGTH_LONG).show();

        db.open();
        Cursor c = db.getAllJobs();
        db.close();
        /*
        if (c.moveToFirst())
        {
            do {          
                DisplayJob(c);
            } while (c.moveToNext());
        }
        db.close();
        */

      //create list
        vListView = (ListView) findViewById(R.id.vlistview);
        lVAAdapter = new ArrayAdapter<String>(ViewJobs.this,
                android.R.layout.simple_list_item_1, titles);

        //create listener
        vListView.setAdapter(lVAAdapter);
        vListView.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> lVAAdapter, View myView,
                    int myItemInt, long mylng) {
                    String selectedFromList = (String) (vListView.getItemAtPosition(myItemInt));
                    if (titles[myItemInt] == "hello") {
                        titles[2] = "test";
                        vListView.invalidateViews();
                    }
            }
        });
    }

    public void DisplayJob(Cursor c)
    {
        Toast.makeText(this, 
                "id: " + c.getString(0) + "\n" +
                "propertyid: " + c.getString(1) + "\n" +
                "propertyaddress: " + c.getString(2) + "\n" +
                "jobnumber: " + c.getString(3) + "\n" +
                "assignedto: " + c.getString(4) + "\n" +
                "company: " + c.getString(5) + "\n" +
                "datecreated: " + c.getString(6) + "\n" +
                "usemasterkey: " + c.getString(7) + "\n" +
                "phonebefore: " + c.getString(8) + "\n" +
                "descriptionofproblem:  " + c.getString(9),
                Toast.LENGTH_LONG).show();        
    } 
}

解决方案

You probably added the jobs table after creating the database. The onCreate would not be called. So you need to clear the data for the onCreate to be called again.

这篇关于麻烦实施数据库导入Android项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆