2011-11-08 4 views
0

と助けを前もって感謝します。私はこれを初めて知り、悩んでしまった。私のアプリはユーザーが入力した情報をSQLiteデータベースに保存します。彼らはレコードを見ることができ、前または次のレコードを見るための "Prev"と "Next"ボタンがあります。次のボタンを使用して空のSQLite行を渡します

私が抱えている問題は、ユーザーがレコードを削除した場合です。空の行をどのようにスキップしますか?ここに私のクリーンアップコードです。ここ

ヘルパークラスDBase.java

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.SQLException; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.database.sqlite.SQLiteDatabase.CursorFactory; 

public class DBase { 

public static final String KEY_ROWID = "_id"; 
public static final String KEY_1 = "a"; 
public static final String KEY_2 = "b"; 
public static final String KEY_3 = "c"; 
public static final String KEY_4 = "d"; 
public static final String KEY_5 = "e"; 
public static final String KEY_6 = "f"; 

private static final String DATABASE_NAME = "name"; 
private static final String DATABASE_TABLE = "table"; 
private static final int DATABASE_VERSION = 1; 

private DbHelper ourHelper; 
private final Context ourContext; 
private SQLiteDatabase ourDatabase; 

private static class DbHelper extends SQLiteOpenHelper { 

    public DbHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     // TODO Auto-generated method stub 
     db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" + KEY_ROWID 
       + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_1 
       + " TEXT NOT NULL, " + KEY_2 + " TEXT NOT NULL, " 
       + KEY_3 + " TEXT NOT NULL, " + KEY_4 
       + " TEXT NOT NULL, " + KEY_5 + " TEXT NOT NULL, " 
       + KEY_6 + " TEXT NOT NULL);"); 

    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // TODO Auto-generated method stub 
     db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE); 
     onCreate(db); 

    } 

} 

public DBase(Context c) { 
    ourContext = c; 

} 

public DBase open() throws SQLException { 
    ourHelper = new DbHelper(ourContext); 
    ourDatabase = ourHelper.getWritableDatabase(); 
    return this; 
} 

public void close() { 
    ourHelper.close(); 
} 

public long createEntry(String a, String b, String c, 
     String d, String e, String f) { 
    // TODO Auto-generated method stub 
    ContentValues cv = new ContentValues(); 
    cv.put(KEY_1, a); 
    cv.put(KEY_2, b); 
    cv.put(KEY_3, c); 
    cv.put(KEY_4, d); 
    cv.put(KEY_5, e); 
    cv.put(KEY_6, f); 
    return ourDatabase.insert(DATABASE_TABLE, null, cv); 

} 

public String[] getRec(long record) { 
    // TODO Auto-generated method stub 

    record = ContactView.record; 

    String[] columns = new String[] { KEY_ROWID, KEY_1, KEY_2, 
      KEY_3, KEY_4, KEY_5, KEY_6 }; 
    Cursor c = ourDatabase.query(DATABASE_TABLE, columns, KEY_ROWID + "=" 
      + record, null, null, null, null); 
    if (c != null && c.moveToFirst()) { 
     String r1 = c.getString(0); 
     String r2 = c.getString(1); 
     String r3 = c.getString(2); 
     String r4 = c.getString(3); 
     String r5 = c.getString(4); 
     String r6 = c.getString(5); 
     String r7 = c.getString(6); 

     String[] rData = { r1, r2, r3, r4, r5, 
       r6, r7 }; 

     return rData; 

    } 

    return null; 
} 

// Returns the last record in the database 
public long lRec() { 

    long lastRec = 0; 
    String query = "SELECT ROWID from Table order by ROWID DESC limit 1"; 
    Cursor c = ourDatabase.rawQuery(query, null); 
    if (c != null && c.moveToFirst()) { 
     lastRec = c.getLong(0); 
    } 
    return lastRec; 
} 

public void deleteEntry(long lRow) { 

    ourDatabase.delete(DATABASE_TABLE, KEY_ROWID + "=" + lRow, null); 

} 

} 

とは、視聴クラスで、ContactView.java

import android.app.Activity; 
import android.app.Dialog; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.Window; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.TextView; 

public class ContactView extends Activity implements OnClickListener { 

TextView etSQLva, etSQLvb, etSQLvc, etSQLvd, etSQLve, 
     etSQLvf, etSQLvg; 
Button bSQLvPrev, bSQLvAdd, bSQLvNext, bSQLvDelete; 
static long record = 1; 
static long lastRecord; 
String[] rRec; 
long[] nextRec; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.contactview); 

    initialize(); 
    display(); 

} 

@Override 
public void onClick(View arg0) { 
    // TODO Auto-generated method stub 

    switch (arg0.getId()) { 
    case R.id.bSQLvPrev: 

     recordMinus(); 
     display(); 

     break; 
    case R.id.bSQLvAdd: 

     Intent i = new Intent("com.example.ADD"); 
     startActivity(i); 

     break; 
    case R.id.bSQLvNext: 

     recordPlus(); 
     display(); 

     break; 
    case R.id.bSQLvDelete: 

     String dRow = etSQLva.getText().toString(); 
     long lRow = Long.parseLong(dRow); 

     DBase db1 = new DBase(this); 

     try { 
      db1.open(); 
      db1.deleteEntry(lRow); 
      db1.close(); 
     } catch (Exception e) { 
      // TODO: handle exception 
      String error = e.toString(); 
      Dialog d = new Dialog(this); 
      d.setTitle("Cannot Delete"); 
      TextView tv = new TextView(this); 
      tv.setText(error); 
      d.setContentView(tv); 
      d.show(); 
     } 

     break; 

    } 
} 

public void initialize() { 

    etSQLva = (TextView) findViewById(R.id.etSQLva); 
    etSQLvb = (TextView) findViewById(R.id.etSQLvb); 
    etSQLvc = (TextView) findViewById(R.id.etSQLvc); 
    etSQLvd = (TextView) findViewById(R.id.etSQLvd); 
    etSQLve = (TextView) findViewById(R.id.etSQLve); 
    etSQLvf = (TextView) findViewById(R.id.etSQLvf); 
    etSQLvg = (TextView) findViewById(R.id.etSQLvg); 

    bSQLvPrev = (Button) findViewById(R.id.bSQLvPrev); 
    bSQLvAdd = (Button) findViewById(R.id.bSQLvAdd); 
    bSQLvNext = (Button) findViewById(R.id.bSQLvNext); 
    bSQLvDelete = (Button) findViewById(R.id.bSQLvDelete); 

    bSQLvPrev.setOnClickListener(this); 
    bSQLvAdd.setOnClickListener(this); 
    bSQLvNext.setOnClickListener(this); 
    bSQLvDelete.setOnClickListener(this); 
} 

public void display() { 

    DBase db = new DBase(this); 

    db.open(); 

    rRec = db.getRec(record); 

    try { 
     lastRecord = db.lRec(); 
    } catch (Exception e) { 
     // TODO: handle exception 

     String error = e.toString(); 
     Dialog d = new Dialog(this); 
     d.setTitle("Cannot get last record"); 
     TextView tv = new TextView(this); 
     tv.setText(error); 
     d.setContentView(tv); 
     d.show(); 
    } 

    db.close(); 

    if (rRec != null) { 
     etSQLva.setText(rRec[0]); 
     etSQLvb.setText(rRec[1]); 
     etSQLvc.setText(rRec[2]); 
     etSQLvd.setText(rRec[3]); 
     etSQLve.setText(rRec[4]); 
     etSQLvf.setText(rRec[5]); 
     etSQLvg.setText(rRec[6]); 
    } else { 

    } 

} 

public void recordPlus() { 
    if (record < lastRecord) { 
     record++; 
    } else { 
     record = 1; 
    } 
} 

public void recordMinus() { 
    if (record == 1) { 
     record = lastRecord; 
    } else { 
     record--; 
    } 

} 



// Menu code below 
public boolean onCreateOptionsMenu(Menu menu) { 
    super.onCreateOptionsMenu(menu); 
    MenuInflater mi = getMenuInflater(); 
    mi.inflate(R.menu.popup, menu); 
    return true; 
} 

public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case R.id.mAdd: 
     startActivity(new Intent("com.example.ADD")); 
     return true; 
    case R.id.mView: 
     startActivity(new Intent("com.example.VIEW")); 
     return true; 
    case R.id.mAbout: 
     startActivity(new Intent("com.example.ABOUT")); 
     return true; 

    } 
    return false; 
} 
// Menu code end 

} 

はどのようにして "次へ" 押されたとき、それは次のunemptyのレコードを表示するのですか?再び

、任意の助けをいただければ幸いです、ありがとう

編集:ここに私の新しいrecordPlus()メソッドのコードがあります。

public void recordPlus() { 
    if (record < lastRecord) { 
     record++; 
    } else { 
     record = 1; 
    } 
    getData(); 

    do{ 
     if (record < lastRecord) { 
      record++; 
     } else { 
      record = 1; 
     } 
     getData(); 

    }while (rRec == null); 

} 

と私はちょうどこのようにチェックコードを持っている(これは擬似コードであることに注意)私はあなたの表示方法では

public void getData() { 

    DBase db = new DBase(this); 

    db.open(); 

    rRec = db.getRec(record); 

    try { 
     lastRecord = db.lRec(); 

    } catch (Exception e) { 
     // TODO: handle exception 

     String error = e.toString(); 
     Dialog d = new Dialog(this); 
     d.setTitle("Cannot get last record"); 
     TextView tv = new TextView(this); 
     tv.setText(error); 
     d.setContentView(tv); 
     d.show(); 
    } 

    db.close(); 

} 

public void display() { 

    if (rRec != null) { 
     etSQLva.setText(rRec[0]); 
     etSQLvb.setText(rRec[1]); 
     etSQLvc.setText(rRec[2]); 
     etSQLvd.setText(rRec[3]); 
     etSQLve.setText(rRec[4]); 
     etSQLvf.setText(rRec[5]); 
     etSQLvg.setText(rRec[6]); 
    } else { 

    } 

} 

答えて

1

の下に投稿私のディスプレイ()メソッドを区切り:

recordPlus(){ 
    Record currentRecord; 
    do{ 
    ++record; 
    currentRecord = getRecord(record); 
    }while(isEmptry(currentRecord) && record < lastRecord) 
} 

あなたはrecordMinusに似たようなことをします。

+0

問題は、ユーザーが前のボタンまたは次のボタンを押したときに前または次のレコードが空(削除されている)の場合、次の空でないレコードに移動したいと思うことです。 –

+0

ご迷惑をおかけして申し訳ございません。私の投稿を編集しました。 –

+0

私のrecordPlus()メソッドは空のレコードをスキップするようになっていますが、今は別の問題があります。それは私が最後のレコードを叩いたときに最初のレコードに回り込むことはありません。上記の新しいコードを編集して追加します。前のボタンにも同じことが起こります。 –

関連する問題