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 {
}
}
問題は、ユーザーが前のボタンまたは次のボタンを押したときに前または次のレコードが空(削除されている)の場合、次の空でないレコードに移動したいと思うことです。 –
ご迷惑をおかけして申し訳ございません。私の投稿を編集しました。 –
私のrecordPlus()メソッドは空のレコードをスキップするようになっていますが、今は別の問題があります。それは私が最後のレコードを叩いたときに最初のレコードに回り込むことはありません。上記の新しいコードを編集して追加します。前のボタンにも同じことが起こります。 –