将数据插入到sqlite数据库中时出错 [英] Error with inserting data into sqlite database

查看:212
本文介绍了将数据插入到sqlite数据库中时出错的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图通过使用对话框包装将数据插入SqLite数据库。但是,我不能这样做。我有两个文本称为标题和模板,以插入到数据库。但它崩溃。
下面是我的java代码:

@Override
public boolean onCreateOptionsMenu(菜单菜单)
{
menu.add(0,MENU_ITEM_INSERT,0,R .string.menu_insert);
return true;
}

I'm trying to insert data into SqLite database by using a dialog wrapper. However, I am unable to do so. I have 2 texts called Title and Template to insert into the database. But it crashes. Below is my java code:
@Override public boolean onCreateOptionsMenu(Menu menu) { menu.add(0,MENU_ITEM_INSERT,0,R.string.menu_insert); return true; }

@Override
public boolean onOptionsItemSelected(MenuItem item)
{
    switch(item.getItemId())
    {
        case MENU_ITEM_INSERT:
            insert();
            //startActivity(new Intent(Intent.ACTION_INSERT,getIntent().getData()));
            return true;
    }
    return(super.onOptionsItemSelected(item));
}

@Override 
public void onCreateContextMenu(ContextMenu menu,View v,ContextMenu.ContextMenuInfo menuInfo)
{
    AdapterView.AdapterContextMenuInfo info;
    try {
         info = (AdapterView.AdapterContextMenuInfo) menuInfo;
    } catch (ClassCastException e) {
        Log.e(TAG, "bad menuInfo", e);
        return;
    }

    mCursor = (Cursor) getListAdapter().getItem(info.position);

    menu.setHeaderTitle(mCursor.getString(COLUMN_INDEX_TITLE));

    menu.add(0,MENU_ITEM_DELETE,0 ,R.string.menu_delete);
    menu.add(1,MENU_ITEM_ADDTMESSAGE,1,R.string.menu_add);
}

@Override
public boolean onContextItemSelected(MenuItem item)
{
    AdapterView.AdapterContextMenuInfo info;
    try {
         info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
    } catch (ClassCastException e) {
        Log.e(TAG, "bad menuInfo", e);
        return false;
    }

    switch(item.getItemId())
    {
        case MENU_ITEM_DELETE:
            //delete selected row
            delete(info.id);
            return true;
        case MENU_ITEM_ADDTMESSAGE:
            //ADD TO MESSAGE
            return true;
    }
    return(super.onContextItemSelected(item));
}

private void insert()
{
    LayoutInflater inflater = LayoutInflater.from(this);
    View addView = inflater.inflate(R.layout.templates_editor,null);
    final DialogWrapper wrapper = new DialogWrapper(addView);

    new AlertDialog.Builder(this)
    .setTitle(R.string.menu_insert)
    .setView(addView)
    .setPositiveButton(R.string.item_ok,new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
            processInsert(wrapper);
        }
    })
    .setNegativeButton(R.string.item_cancel,new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
            // ignore, just dismiss
        }
    })
    .show();
}

private void delete(final long rowId)
{
    if(rowId > 0)
    {
        new AlertDialog.Builder(this)
                        .setTitle(R.string.menu_delete)
                        .setPositiveButton(R.string.item_ok, 
                                new DialogInterface.OnClickListener() {

                            public void onClick(DialogInterface dialog, int which) {
                                processDelete(rowId);
                            }
                        })
                        .setNegativeButton(R.string.item_cancel,
                                new DialogInterface.OnClickListener() {

                                    public void onClick(DialogInterface dialog, int which) {
                                        //dismiss dialog
                                    }
                                }).show();
    }
}

private void processDelete(long rowId)
{
    String[] args = {String.valueOf(rowId)};

    db.getWritableDatabase().delete("Templates", Templates._ID, args);
    mCursor.requery();
}

private void processInsert(DialogWrapper wrapper)
{
    ContentValues cv = new ContentValues();

    cv.put("title", wrapper.getTitle());
    cv.put("template", wrapper.getTemplate());

    db.getWritableDatabase().insert("Templates", "title", cv);
    db.getWritableDatabase().insert("Templates", "template", cv);
    mCursor.requery();
}

class DialogWrapper{
    EditText titleField = null;
    EditText templateField = null;
    View base = null;

    DialogWrapper(View base) {
        this.base = base;
    }

    String getTitle(){
        return(getTitleField().getText().toString());
    }

    String getTemplate(){
        return(getTemplateField().getText().toString());            
    }

    private EditText getTitleField(){
        if(titleField == null){
            titleField = (EditText) findViewById(R.id.title);
        }
        return titleField;
    }

    private EditText getTemplateField(){
        if(templateField == null){
            templateField = (EditText) findViewById(R.id.template);
        }
        return templateField;
    }
}

下面是我的logCat:

Below is my logCat:

12-02 08:23:17.712:ERROR / AndroidRuntime(204):未捕获处理程序:线程主程序由于未捕获异常而退出

12-02 08:23:17.862 :ERROR / AndroidRuntime(204):java.lang.NullPointerException

12-02 08:23:17.862:ERROR / AndroidRuntime(204):在joel.GroupSMS.TemplatesList $ DialogWrapper.getTitle(TemplatesList.java :214)

12-02 08:23:17.862:ERROR / AndroidRuntime(204):在joel.GroupSMS.TemplatesList.processInsert(TemplatesList.java:196)

12- 02 08:23:17.862:ERROR / AndroidRuntime(204):在joel.GroupSMS.TemplatesList.access $ 0(TemplatesList.java:192)

12-02 08:23:17.862:ERROR / AndroidRuntime 204):at joel.GroupSMS.TemplatesList $ 1.onClick(TemplatesList.java:150)

12-02 08:23:17.862:ERROR / AndroidRuntime(204):at com.android.internal.app .AlertController $ ButtonHandler.handleMessage(AlertController.java:158)

12-02 08:23:17.862:ERROR / AndroidRuntime(204):在android.os.Handler.dispatchMessage(Handler.java:99 )

12-02 08:23:17.862:ERROR / AndroidRuntime(204):在android.os.Looper.loop(Looper.java:123)

12-02 08 :23:17.862:ERROR / AndroidRuntime(204):在android.app.ActivityThread.main(ActivityThread.java:4363)

12-02 08:23:17.862:ERROR / AndroidRuntime在java.lang.reflect.Method.invokeNative(本地方法)

12-02 08:23:17.862:ERROR / AndroidRuntime(204):在java.lang.reflect.Method.invoke(方法。 java:521)

12-02 08:23:17.862:ERROR / AndroidRuntime(204):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:860)

12-02 08:23:17.862:ERROR / AndroidRuntime(204):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)

12-02 08:23:17.862:ERROR / AndroidRuntime(204):at dalvik.system.NativeStart.main(Native Method)

12-02 08:23:17.712: ERROR/AndroidRuntime(204): Uncaught handler: thread main exiting due to uncaught exception
12-02 08:23:17.862: ERROR/AndroidRuntime(204): java.lang.NullPointerException
12-02 08:23:17.862: ERROR/AndroidRuntime(204): at joel.GroupSMS.TemplatesList$DialogWrapper.getTitle(TemplatesList.java:214)
12-02 08:23:17.862: ERROR/AndroidRuntime(204): at joel.GroupSMS.TemplatesList.processInsert(TemplatesList.java:196)
12-02 08:23:17.862: ERROR/AndroidRuntime(204): at joel.GroupSMS.TemplatesList.access$0(TemplatesList.java:192)
12-02 08:23:17.862: ERROR/AndroidRuntime(204): at joel.GroupSMS.TemplatesList$1.onClick(TemplatesList.java:150)
12-02 08:23:17.862: ERROR/AndroidRuntime(204): at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:158)
12-02 08:23:17.862: ERROR/AndroidRuntime(204): at android.os.Handler.dispatchMessage(Handler.java:99)
12-02 08:23:17.862: ERROR/AndroidRuntime(204): at android.os.Looper.loop(Looper.java:123)
12-02 08:23:17.862: ERROR/AndroidRuntime(204): at android.app.ActivityThread.main(ActivityThread.java:4363)
12-02 08:23:17.862: ERROR/AndroidRuntime(204): at java.lang.reflect.Method.invokeNative(Native Method)
12-02 08:23:17.862: ERROR/AndroidRuntime(204): at java.lang.reflect.Method.invoke(Method.java:521)
12-02 08:23:17.862: ERROR/AndroidRuntime(204): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
12-02 08:23:17.862: ERROR/AndroidRuntime(204): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
12-02 08:23:17.862: ERROR/AndroidRuntime(204): at dalvik.system.NativeStart.main(Native Method)

>
这是我的stacktrace请求关于我的评论:

Edit
This is my stacktrace requested pertaining to my comment:

12-06 16:54:12.466:INFO / ActivityManager {cmp = joel.GroupSMS / .TemplateEdit}

12-06 16:54:16.550:DEBUG / AndroidRuntime(254):关闭VM
12-06 16:54:16.550:WARN / dalvikvm(254):threadid = 3:退出未捕获异常的线程(组= 0x4001b188)

12-06 16:54:16.550:ERROR / AndroidRuntime(254):未捕获处理程序:到uncaught异常

12-06 16:54:16.736:ERROR / AndroidRuntime(254):java.lang.RuntimeException:无法启动活动ComponentInfo {joel.GroupSMS / joel.GroupSMS.TemplateEdit}:java .lang.NullPointerException

12-06 16:54:16.736:ERROR / AndroidRuntime(254):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)

12 -06 16:54:16.736:ERROR / AndroidRuntime(254):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)

12-06 16:54:16.736:ERROR / AndroidRuntime 254):在android.app.ActivityThread.access $ 2200(ActivityThread.java:119)

12-06 16:54:16.736:ERROR / AndroidRuntime(254):在android.app.ActivityThread $ H .handleMessage(ActivityThread.java:1863)

12-06 16:54:16.736:ERROR / AndroidRuntime(254):在android.os.Handler.dispatchMessage(Handler.java:99)

12-06 16:54:16.736:ERROR / AndroidRuntime(254):在android.os.Looper.loop(Looper.java:123)

12-06 16:54:16.736 :ERROR / AndroidRuntime(254):在android.app.ActivityThread.main(ActivityThread.java:4363)

12-06 16:54:16.736:ERROR / AndroidRuntime(254):at java.lang .reflect.Method.invokeNative(本地方法)

12-06 16:54:16.736:ERROR / AndroidRuntime(254):at java.lang.reflect.Method.invoke(Method.java:521)

12-06 16:54:16.736:ERROR / AndroidRuntime(254):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:860)

12-06 16:54:16.736:ERROR / AndroidRuntime(254):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)

12-06 16:54: 16.736:ERROR / AndroidRuntime(254):at dalvik.system.NativeStart.main(本地方法)

12-06 16:54:16.736:ERROR / AndroidRuntime(254):Caused by:java.lang .NullPointerException

12-06 16:54:16.736:ERROR / AndroidRuntime(254):在android.content.ContentResolver.acquireProvider(ContentResolver.java:754)

12-06 16:54:16.736:ERROR / AndroidRuntime(254):在android.content.ContentResolver.query(ContentResolver.java:197)

12-06 16:54:16.736:ERROR / AndroidRuntime :at android.app.Activity.managedQuery(Activity.java:1495)

12-06 16:54:16.736:ERROR / AndroidRuntime(254):在joel.GroupSMS.TemplateEdit.onCreate(TemplateEdit。 java:77)

12-06 16:54:16.736:ERROR / AndroidRuntime(254):at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)

12 -06 16:54:16.736:ERROR / AndroidRuntime(254):at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)

12-06 16:54:12.466: INFO/ActivityManager(58): Starting activity: Intent { cmp=joel.GroupSMS/.TemplateEdit }
12-06 16:54:16.550: DEBUG/AndroidRuntime(254): Shutting down VM 12-06 16:54:16.550: WARN/dalvikvm(254): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
12-06 16:54:16.550: ERROR/AndroidRuntime(254): Uncaught handler: thread main exiting due to uncaught exception
12-06 16:54:16.736: ERROR/AndroidRuntime(254): java.lang.RuntimeException: Unable to start activity ComponentInfo{joel.GroupSMS/joel.GroupSMS.TemplateEdit}: java.lang.NullPointerException
12-06 16:54:16.736: ERROR/AndroidRuntime(254): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
12-06 16:54:16.736: ERROR/AndroidRuntime(254): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
12-06 16:54:16.736: ERROR/AndroidRuntime(254): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
12-06 16:54:16.736: ERROR/AndroidRuntime(254): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
12-06 16:54:16.736: ERROR/AndroidRuntime(254): at android.os.Handler.dispatchMessage(Handler.java:99)
12-06 16:54:16.736: ERROR/AndroidRuntime(254): at android.os.Looper.loop(Looper.java:123)
12-06 16:54:16.736: ERROR/AndroidRuntime(254): at android.app.ActivityThread.main(ActivityThread.java:4363)
12-06 16:54:16.736: ERROR/AndroidRuntime(254): at java.lang.reflect.Method.invokeNative(Native Method)
12-06 16:54:16.736: ERROR/AndroidRuntime(254): at java.lang.reflect.Method.invoke(Method.java:521)
12-06 16:54:16.736: ERROR/AndroidRuntime(254): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
12-06 16:54:16.736: ERROR/AndroidRuntime(254): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
12-06 16:54:16.736: ERROR/AndroidRuntime(254): at dalvik.system.NativeStart.main(Native Method)
12-06 16:54:16.736: ERROR/AndroidRuntime(254): Caused by: java.lang.NullPointerException
12-06 16:54:16.736: ERROR/AndroidRuntime(254): at android.content.ContentResolver.acquireProvider(ContentResolver.java:754)
12-06 16:54:16.736: ERROR/AndroidRuntime(254): at android.content.ContentResolver.query(ContentResolver.java:197)
12-06 16:54:16.736: ERROR/AndroidRuntime(254): at android.app.Activity.managedQuery(Activity.java:1495)
12-06 16:54:16.736: ERROR/AndroidRuntime(254): at joel.GroupSMS.TemplateEdit.onCreate(TemplateEdit.java:77)
12-06 16:54:16.736: ERROR/AndroidRuntime(254): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
12-06 16:54:16.736: ERROR/AndroidRuntime(254): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)

推荐答案

很难知道代码中的行号是否匹配traceback,但我猜测(EditText)findViewById(R.id.title)返回null。在执行插入操作时,在hierarchyviewer中检查应用程序,并确保在您处理插入代码时,您认为在层次结构中存在的视图实际上存在。

It's hard to tell without line numbers in your code to match the traceback but I'm guessing that (EditText) findViewById(R.id.title) is returning null. Check your app in hierarchyviewer at the time you're doing the insert and make sure the view you think is there in the hierarchy is actually there at the time you're processing the insert code.

这篇关于将数据插入到sqlite数据库中时出错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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