0

私はいくつかの連絡先を保存し、アンドロイド携帯電話デバイスで連絡先を取得する簡単なアプリを構築しています。

独自のデータベースとテーブルを作成し、電話でテーブルに値を挿入しました。

私の電話はルート化されていません。そのため、ファイルにアクセスできませんが、値がテーブルに格納されていることがわかります。また、エミュレーターでもテストされています。ここまでは大丈夫です。

テーブルからデータをフェッチして、リスト内のすべての連絡先を表示します。これでもいいです。

しかし、問題は、レコードを削除しようとすると、logcat でテーブル名が null であることが示され (例外ではありません)、データが削除されないことです。しかし、エミュレーターでは、データがテーブルから削除されています。電話でこれを達成することはできません。

これは削除するための私のコードです、

 public boolean onContextItemSelected(MenuItem item) {

    super.onContextItemSelected(item);
    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item
            .getMenuInfo();
    int menuItemIndex = item.getItemId();
    String[] menuItems = getResources().getStringArray(R.array.menu);
    String menuItemName = menuItems[menuItemIndex];
    String listItemName = Customers[info.position];

    if (item.getTitle().toString().equalsIgnoreCase("Delete")) {
        Toast.makeText(
                context,
                "Selected List item is: " + listItemName + "MenuItem is: "
                        + menuItemName, Toast.LENGTH_LONG).show();

        DB = context.openOrCreateDatabase("CustomerDetails.db",
                MODE_PRIVATE, null);
        try {
            int pos = info.position;
            pos = pos + 1;
            Log.d("", "customers[pos]: " + Customers[info.position]);
            Cursor c = DB
                    .rawQuery(
                            "Select customer_id,first_name,last_name from CustomerInfo",
                            null);
            int rowCount = c.getCount();

            DB.delete(Table_name,
                    "customer_id" + "=" + String.valueOf(pos), null);

            DB.close();
            Log.d("", "" + String.valueOf(pos));
            Toast.makeText(context, "Deleted Customer", Toast.LENGTH_LONG)
                    .show();
            // Customers[info.position]=null;
            getCustomers();
        } catch (Exception e) {
            Toast.makeText(context, "Delete unsuccessfull",
                    Toast.LENGTH_LONG).show();
        }

    }

これは私のlogcatです。

07-02 10:12:42.976: D/Cursor(1560): Database path: CustomerDetails.db
07-02 10:12:42.976: D/Cursor(1560): Table name   : null
07-02 10:12:42.984: D/Cursor(1560): Database path: CustomerDetails.db
07-02 10:12:42.984: D/Cursor(1560): Table name   : null

データが削除されない理由がわかりません。テーブルにデータが存在します。

私のコードを修正してください。どんな助けでも大歓迎です!!

4

2 に答える 2

1

次の行で文字列型として渡している間、customer_id は整数型です。

DB.delete(Table_name,"customer_id" + "=" + String.valueOf(pos), null);

それが を返す理由ですfalse。次のように整数自体として使用してみてください。

DB.delete(Table_name,"customer_id" + "=" + pos, null);
于 2013-07-02T05:03:14.857 に答える
0

可能であれば、この方法も試してください。

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

public class RegistrationAdapter {
    SQLiteDatabase database_ob;
    RegistrationOpenHelper openHelper_ob;
    Context context;

    public RegistrationAdapter(Context c) {
        context = c;
    }

    public RegistrationAdapter opnToRead() {
        openHelper_ob = new RegistrationOpenHelper(context,
                openHelper_ob.DATABASE_NAME, null, openHelper_ob.VERSION);
        database_ob = openHelper_ob.getReadableDatabase();
        return this;

    }

    public RegistrationAdapter opnToWrite() {
        openHelper_ob = new RegistrationOpenHelper(context,
                openHelper_ob.DATABASE_NAME, null, openHelper_ob.VERSION);
        database_ob = openHelper_ob.getWritableDatabase();
        return this;

    }

    public void Close() {
        database_ob.close();
    }

    public long insertDetails(String fname, String lname) {
        ContentValues contentValues = new ContentValues();
        contentValues.put(openHelper_ob.FNAME, fname);
        contentValues.put(openHelper_ob.LNAME, lname);
        opnToWrite();
        long val = database_ob.insert(openHelper_ob.TABLE_NAME, null,
                contentValues);
        Close();
        return val;

    }

    public Cursor queryName() {
        String[] cols = { openHelper_ob.KEY_ID, openHelper_ob.FNAME,
                openHelper_ob.LNAME };
        opnToWrite();
        Cursor c = database_ob.query(openHelper_ob.TABLE_NAME, cols, null,
                null, null, null, null);

        return c;

    }

    public Cursor queryAll(int nameId) {
        String[] cols = { openHelper_ob.KEY_ID, openHelper_ob.FNAME,
                openHelper_ob.LNAME };
        opnToWrite();
        Cursor c = database_ob.query(openHelper_ob.TABLE_NAME, cols,
                openHelper_ob.KEY_ID + "=" + nameId, null, null, null, null);

        return c;

    }

    public long updateldetail(int rowId, String fname, String lname) {
        ContentValues contentValues = new ContentValues();
        contentValues.put(openHelper_ob.FNAME, fname);
        contentValues.put(openHelper_ob.LNAME, lname);
        opnToWrite();
        long val = database_ob.update(openHelper_ob.TABLE_NAME, contentValues,
                openHelper_ob.KEY_ID + "=" + rowId, null);
        Close();
        return val;
    }

    public int deletOneRecord(int rowId) {
        // TODO Auto-generated method stub
        opnToWrite();
        int val = database_ob.delete(openHelper_ob.TABLE_NAME,
                openHelper_ob.KEY_ID + "=" + rowId, null);
        Close();
        return val;
    }

}

openhelper.java

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class RegistrationOpenHelper extends SQLiteOpenHelper {
    public static final String DATABASE_NAME = "REGISTRATION_DB";
    public static final String TABLE_NAME = "REGISTRATION_TABLE";
    public static final String TABLE_NAME_ONE = "REGISTRATION_TABLE_ONE";
    public static final int VERSION = 1;
    public static final String KEY_ID = "_id";
    public static final String FNAME = "F_NAME";
    public static final String PKEY_ID = "pid";
    public static final String PROFILE = "profile";
    public static final String LNAME = "L_NAME";
    public static final String SCRIPT = "create table " + TABLE_NAME + " ("
            + KEY_ID + " integer primary key autoincrement, " + FNAME
            + " text not null, " + LNAME + " text not null );";

    public static final String PROFILE_TABLE = "create table " + TABLE_NAME_ONE + " ("
            + PKEY_ID + " integer primary key autoincrement, " + PROFILE
            + " text not null, );";

  /* public static final String PROFILE_TABLE="create table profiletable(profileid integer primary key autoincrement,profilename text null);";
   public static final String VALUE_TABLE="create table valuetable(id integer primary key autoincrement,value text null,delay );";
   */


    public RegistrationOpenHelper(Context context, String name,
            CursorFactory factory, int version) {
        super(context, name, factory, version);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub
        db.execSQL(SCRIPT);
        db.execSQL(PROFILE_TABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub
        db.execSQL("drop table " + TABLE_NAME);
        db.execSQL("drop table "+TABLE_NAME_ONE);
        onCreate(db);
    }

}
于 2013-09-12T12:10:06.270 に答える