0

Android の sqlite データベースで行全体を更新しようとしています。しかし、何らかの理由で例外をスローしています。

データベースを更新する方法は次のとおりです。

public void updateEvent(long rowId,Evento evento){
        int row=(int)rowId;
        ContentValues eventValues=createContentValues(evento);
        db.update(TABLE,eventValues,KEY_ROWID+"="+row,null);
    }

createContentValues メソッドは次のとおりです。

private ContentValues createContentValues(Evento evento){
        ContentValues val=new ContentValues();
        val.put(KEY_ROWID,evento.getIdEvento());
        val.put(KEY_SUMMARY,evento.getSummario());
        val.put(KEY_DAY,evento.getFecha().getDia());
        val.put(KEY_MONTH,evento.getFecha().getMes());
        val.put(KEY_YEAR,evento.getFecha().getAnho());
        val.put(KEY_STATUS,evento.getStatus());
        val.put(KEY_NOTES, evento.getNota());
        return val;
    }

update メソッドを呼び出すメソッドは次のとおりです。

private void acceptAction(Evento evnt,String note){
        DbAdapter dbConn=new DbAdapter(this.getApplicationContext());
        evnt.setNota(note);
        try{
        dbConn.updateEvent(evnt.getIdEvento(), evnt);
        }catch(Exception e){
            Toast.makeText(this.getApplicationContext(), "Error al Actualizar tu Evento", Toast.LENGTH_SHORT).show();
            //Log.e("Error Candelaria", e.getMessage());
        }
    }

printStackTrace()Exception オブジェクトに情報が含まれていないため、ログ エントリ行にコメントが付けられています。println が NullPointerException をスローするため、実行できません。

更新: ログキャット:

04-19 13:53:15.910: E/AndroidRuntime(4934): java.lang.NullPointerException
04-19 13:53:15.910: E/AndroidRuntime(4934):     at com.siitne.candelaria.data.DbAdapter.updateEvent(DbAdapter.java:48)
04-19 13:53:15.910: E/AndroidRuntime(4934):     at com.siitne.candelaria.ImportantList.acceptAction(ImportantList.java:130)
04-19 13:53:15.910: E/AndroidRuntime(4934):     at com.siitne.candelaria.ImportantList.access$3(ImportantList.java:126)
04-19 13:53:15.910: E/AndroidRuntime(4934):     at com.siitne.candelaria.ImportantList$1$1.onClick(ImportantList.java:113)
4

2 に答える 2

2

KEY_ROWID が整数であると仮定すると、一重引用符は必要ありません。

db.update(TABLE,eventValues,KEY_ROWID+"="+row+"",null);

整数でない場合

db.update(TABLE,eventValues,KEY_ROWID+"= '"+row+"'",null);

スタックトレースを印刷する必要はありません。Logcatというビューがあります。これにより、完全なエラー スタック トレースが表示されます。

編集: sqlexception ではなく、NullpointerException です。dbもeventoもnull でないことを確認する必要があります。

于 2012-04-19T19:49:58.210 に答える
1

KEY_ROWID+"='"+行

囲んでいる ' がありません

読むべき

KEY_ROWID+"='"+行 + "'"

于 2012-04-19T19:50:06.200 に答える