1

コードを実行するたびに 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 もっと見る
4

2 に答える 2

2

回答としてマークできるように追加してください:)

ここでは「report.java:129」が悪者のようですが、それはあなたがコーディングしていますか? もしそうなら、上記のインラインコードでそれをマークしていただけますか。これをデバッグするのに少し役立つはずです:D – erbsman 4時間前

于 2012-04-10T21:47:56.120 に答える
1

アーロン私は同じ例外を持っており、解決策は次のCheck your column name you want to access it from cursor is same name as exists in databaseとおりです。また、削除white spaceして最初にクエリを実行してからSQLITE browser、コーディングを試して、いくつかDebugging ,I mean print query in logcat and copy ,and paste and sqlite Browserのキーを作成してください。そうしないと、解決するのに時間がかかり、困難になります!

于 2012-04-10T17:41:38.063 に答える