コードを実行するたびに logcat にこれが表示され続け、修正方法がわかりません。更新するとこのエラーが発生します。削除するときに同様のコードを使用すると、正常に動作します。更新時にブレークポイントを使用しましたが、関数の最後まで進み続けました。startActivityForResult で次のページに行くと思っていましたが、そうではありません。startActivityForResult のまったく同じコードが別の関数で機能しました
アップデート用コードはこちら
public void edit_to_report_page(final View v) {
LayoutInflater inflater = LayoutInflater.from(this);
View addView = inflater.inflate(R.layout.new_vehicle, null);
idNum = (EditText) addView.findViewById(R.id.deleteRecord);
new AlertDialog.Builder(this)
.setTitle("Edit a report")
.setMessage("Enter the Id number of the report to edit")
.setView(addView)
.setPositiveButton("Edit",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int which) {
String id = idNum.getText().toString();
uniqueID = Long.parseLong(id);
newID(uniqueID);
info.open();
try {
boolean correctNumber = info
.Exists(uniqueID);
if (!correctNumber) {
Toast.makeText(getApplicationContext(),
"Number not found",
Toast.LENGTH_SHORT).show();
info.close();
}else{
info.close();
intent = new Intent(v.getContext(),
report.class);
startActivityForResult(intent, 0);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
})
.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int which) {
// TODO Auto-generated method stub
}
}).show();
}
動作する削除のコードは次のとおりです
public void delete_db(View v) {
LayoutInflater inflater = LayoutInflater.from(this);
View addView = inflater.inflate(R.layout.new_vehicle, null);
idNum = (EditText) addView.findViewById(R.id.deleteRecord);
final Dialog d = new Dialog(this);
final TextView tv = new TextView(this);
new AlertDialog.Builder(this)
.setTitle("Delete a report")
.setMessage("Enter the Id number of the report to delete")
.setView(addView)
.setPositiveButton("Delete",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int which) {
String id = idNum.getText().toString();
long primaryId = Long.parseLong(id);
info.open();
try {
boolean inCorrectNumber = info
.deleteInspection(primaryId);
if (inCorrectNumber) {
Toast.makeText(getApplicationContext(),
"Number not found",
Toast.LENGTH_SHORT).show();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
info.close();
dbInfo();
}
})
.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int which) {
// TODO Auto-generated method stub
}
}).show();
}
これは、delete と Exists(update) の dbAdapter のコードです。
public boolean Exists(long _id)throws Exception
{
Cursor c = db.query(DB_TABLE, new String[] { KEY_ROWID},
"_id=" + _id, null, null, null, null);
boolean exists=(c.getCount()>0);
c.close();
return exists;
}
public boolean deleteInspection(long _id)throws Exception
{
int numResults = 0;
numResults = db.delete(DB_TABLE,"_id=" + _id , null);
return (numResults < 1);
}
これがlogcatで得られるものです
04-10 09:47:05.006: E/CursorWindow(2961): フィールド スロット 0、-1 の不正な要求。行数 = 1、列数 = 1 04-10 09:47:05.016: D/AndroidRuntime(2961): VM をシャットダウンしています 04-10 09:47:05.027: W/dalvikvm (2961): threadid=1: キャッチされない例外で終了するスレッド (グループ = 0x4001d800) 04-10 09:47:05.046: E/AndroidRuntime(2961): 致命的な例外: メイン 04-10 09:47:05.046: E/AndroidRuntime(2961): java.lang.RuntimeException: アクティビティ ComponentInfo を開始できません {com.signalsetapp/com.signalsetapp.inspectionchecklist.report}: java.lang.IllegalStateException: フィールド スロットを取得します行 0 列 -1 から失敗しました 04-10 09:47:05.046: E/AndroidRuntime (2961): android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2663) で 04-10 09:47:05.046: E/AndroidRuntime (2961): android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2679) で 04-10 09:47:05.046: E/AndroidRuntime(2961): android.app.ActivityThread.access$2300(ActivityThread.java:125) で 04-10 09:47:05.046: E/AndroidRuntime(2961): android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) で 04-10 09:47:05.046: E/AndroidRuntime(2961): android.os.Handler.dispatchMessage(Handler.java:99) で 04-10 09:47:05.046: E/AndroidRuntime(2961): android.os.Looper.loop(Looper.java:123) 04-10 09:47:05.046: E/AndroidRuntime(2961): android.app.ActivityThread.main(ActivityThread.java:4627) 04-10 09:47:05.046: E/AndroidRuntime(2961): java.lang.reflect.Method.invokeNative(ネイティブ メソッド) で 04-10 09:47:05.046: E/AndroidRuntime(2961): java.lang.reflect.Method.invoke(Method.java:521) で 04-10 09:47:05.046: E/AndroidRuntime(2961): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) で 04-10 09:47:05.046: E/AndroidRuntime (2961): com.android.internal.os.ZygoteInit.main (ZygoteInit.java:626) で 04-10 09:47:05.046: E/AndroidRuntime(2961): dalvik.system.NativeStart.main(ネイティブメソッド) 04-10 09:47:05.046: E/AndroidRuntime(2961): 原因: java.lang.IllegalStateException: 行 0 列 -1 からフィールド スロットを取得できませんでした 04-10 09:47:05.046: E/AndroidRuntime(2961): android.database.CursorWindow.getString_native(ネイティブメソッド) 04-10 09:47:05.046: E/AndroidRuntime(2961): android.database.CursorWindow.getString(CursorWindow.java:329) で 04-10 09:47:05.046: E/AndroidRuntime (2961): android.database.AbstractWindowedCursor.getString (AbstractWindowedCursor.java:49) で 04-10 09:47:05.046: E/AndroidRuntime (2961): com.signalsetapp.inspectionchecklist.report.getInfoFromDB (report.java:129) で 04-10 09:47:05.046: E/AndroidRuntime (2961): com.signalsetapp.inspectionchecklist.report.onCreate (report.java:111) で 04-10 09:47:05.046: E/AndroidRuntime (2961): android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1047) で 04-10 09:47:05.046: E/AndroidRuntime (2961): android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2627) で 04-10 09:47:05.046: E/AndroidRuntime(2961): ... 11 もっと見る