Ошибка при вставке данных в базу данных sqlite - PullRequest
1 голос
/ 02 декабря 2010

Я пытаюсь вставить данные в базу данных SqLite с помощью диалогового окна.Однако я не могу этого сделать.У меня есть 2 текста под названием Заголовок и Шаблон для вставки в базу данных.Но это вылетает.Ниже приведен мой код Java:
@Override public boolean onCreateOptionsMenu (Меню меню) {menu.add (0, MENU_ITEM_INSERT, 0, R.string.menu_insert);вернуть истину;}

@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:

12-02 08: 23: 17.712: ОШИБКА / AndroidRuntime (204): необработанный обработчик: выход из основного потока из-за необработанного исключения
12-02 08: 23: 17.862: ОШИБКА / AndroidRuntime (204): java.lang.NullPointerException
12-02 08: 23: 17.862: ОШИБКА / AndroidRuntime (204): в joel.GroupSMS.TemplatesList $ DialogWrapper.getTitle(TemplatesList.java:214)
12-02 08: 23: 17.862: ОШИБКА / AndroidRuntime (204): в joel.GroupSMS.TemplatesList.processInsert (TemplatesList.java:196)
12-02 08:23: 17.862: ОШИБКА / AndroidRuntime (204): в joel.GroupSMS.TemplatesList.access $ 0 (TemplatesList.java:192)
12-02 08: 23: 17.862: ОШИБКА / AndroidRuntime (204): в joel.GroupSMS.TemplatesList $ 1.onClick (TemplatesList.java:150)
12-02 08: 23: 17.862: ОШИБКА / AndroidRuntime (204): в com.android.internal.app.AlertController $ ButtonHandler.handleMessage (AlertController.java:158))
12-02 08: 23: 17.862: ОШИБКА / AndroidRuntime (204): на android.os.Handler.dispatchMessage (Handler.java:99)
12-02 08: 23: 17.862: ОШИБКА / AndroidRuntime (204): на android.os.Looper.loop (Looper.java:123)
12-02 08: 23: 17.862: ОШИБКА / AndroidRuntime (204):atroid.app.ActivityThread.main (ActivityThread.java:4363)
12-02 08: 23: 17.862: ОШИБКА / AndroidRuntime (204): на java.lang.reflect.Method.invokeNative (собственный метод)
12-02 08: 23: 17.862: ОШИБКА / AndroidRuntime (204): в java.lang.reflect.Method.invoke (Method.java:521)
12-02 08: 23: 17.862: ОШИБКА / AndroidRuntime (204): в com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:860)
12-02 08: 23: 17.862: ОШИБКА / AndroidRuntime (204): в com.android.internal.os.ZygoteInit.main (ZygoteInit.java:618)
12-02 08: 23: 17.862: ОШИБКА / AndroidRuntime (204): в dalvik.system.NativeStart.main (собственный метод)

Редактировать
Это моя запрошенная трассировка стека, относящаяся к моему комментарию:

12-06 16: 54: 12.466: INFO / ActivityManager (58): Стартовая активность: Intent {cmp = joel.GroupSMS / .TemplateEdit}
12-0616: 54: 16.550: DEBUG / AndroidRuntime (254): завершение работы виртуальной машины 12-06 16: 54: 16.550: WARN / dalvikvm (254): threadid = 3: выход из потока с необработанным исключением (группа = 0x4001b188)
12-06 16: 54: 16.550: ОШИБКА / AndroidRuntime (254): необработанный обработчик: выход из основного потока из-за необработанного исключения
12-06 16: 54: 16.736: ОШИБКА / AndroidRuntime (254): java.lang.RuntimeException:Невозможно запустить действие ComponentInfo {joel.GroupSMS / joel.GroupSMS.TemplateEdit}: java.lang.NullPointerException
12-06 16: 54: 16.736: ОШИБКА / AndroidRuntime (254): в android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2496)
12-06 16: 54: 16.736: ОШИБКА / AndroidRuntime (254): в android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2512)
12-06 16:54:16.736: ОШИБКА / AndroidRuntime (254): на android.app.ActivityThread.access $ 2200 (ActivityThread.java:119)
12-06 16: 54: 16.736: ОШИБКА / AndroidRuntime (254): на android.app.ActivityThread$ H.handleMessage (ActivityThread.java:1863)
12-06 16:54: 16.736: ОШИБКА / AndroidRuntime (254): на android.os.Handler.dispatchMessage (Handler.java:99)
12-06 16: 54: 16.736: ОШИБКА / AndroidRuntime (254): на android.os.Looper.loop (Looper.java:123)
12-06 16: 54: 16.736: ОШИБКА / AndroidRuntime (254): в android.app.ActivityThread.main (ActivityThread.java:4363)
12-0616: 54: 16.736: ОШИБКА / AndroidRuntime (254): на java.lang.reflect.Method.invokeNative (собственный метод)
12-06 16: 54: 16.736: ОШИБКА / AndroidRuntime (254): в java.lang.reflect.Method.invoke (Method.java:521)
12-06 16: 54: 16.736: ОШИБКА / AndroidRuntime (254): в com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:860)
12-06 16: 54: 16.736: ОШИБКА / AndroidRuntime (254): в com.android.internal.os.ZygoteInit.main (ZygoteInit.java:618)
12-06 16: 54: 16.736: ОШИБКА / AndroidRuntime (254): в dalvik.system.NativeStart.main (собственный метод)
12-06 16:54: 16.736: ОШИБКА / AndroidRuntime (254): вызвано: java.lang.NullPointerException
12-06 16: 54: 16.736: ОШИБКА / AndroidRuntime (254): в android.content.ContentResolver.acquireProvider (ContentResolver.java: 754)
12-06 16: 54: 16.736: ОШИБКА / AndroidRuntime (254): в android.content.ContentResolver.query (ContentResolver.java:197)
12-06 16: 54: 16.736: ОШИБКА/ AndroidRuntime (254): в android.app.Activity.managedQuery (Activity.java:1495)
12-06 16: 54: 16.736: ОШИБКА / AndroidRuntime (254): в joel.GroupSMS.TemplateEdit.onCreate(TemplateEdit.java:77)
12-06 16: 54: 16.736: ОШИБКА / AndroidRuntime (254): в android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1047)
12-06 16:54: 16.736: ОШИБКА / AndroidRuntime (254): в android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2459)

1 Ответ

0 голосов
/ 02 декабря 2010

Трудно сказать без номеров строк в вашем коде, чтобы соответствовать трассировке, но я предполагаю, что (EditText) findViewById(R.id.title) возвращает ноль. Проверяйте свое приложение в иерархическом средстве просмотра во время выполнения вставки и убедитесь, что представление, которое, по вашему мнению, находится в иерархии, действительно существует во время обработки кода вставки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...