[英]Reading Data from SQLite Database to a new Activity - Android Studio
我正在創建一個 android 應用程序,它基本上有 6 個輸入(2 個來自微調器和其余的文本視圖)並且正在使用 SQLite 數據庫。 當用戶單擊“開始按鈕”時,我已經將數據成功保存到數據庫並顯示在同一活動中。
我尋求幫助的問題是..我想顯示保存的數據,而不是在保存數據的同一個活動(屏幕)上,而是在不同的活動上。 因此,例如,在屏幕 1 上存儲和顯示數據方面一切正常,但如何在屏幕 2 上再次檢索數據?
這是我必須保存數據的代碼(DataBaseHelper):
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table " + TABLE_NAME +" (ID INTEGER PRIMARY KEY AUTOINCREMENT,LINETYPE TEXT,PACKAGETYPE TEXT,QUANTITY TEXT,DURATION TEXT,STARTTIME TEXT,ENDTIME TEXT)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int i, int i1) {
db.execSQL("DROP TABLE IF EXISTS "+TABLE_NAME);
onCreate(db);
}
public boolean insertData(String linetype, String packagetype, String quantity, String duration, String starttime, String endtime) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(COL_2,linetype);
contentValues.put(COL_3,packagetype);
contentValues.put(COL_4,quantity);
contentValues.put(COL_5,duration);
contentValues.put(COL_6,starttime);
contentValues.put(COL_7,endtime);
long result = db.insert(TABLE_NAME,null,contentValues);
if(result == -1)
return false;
else
return true;
}
public Cursor getAllData() {
SQLiteDatabase db = this.getWritableDatabase();
Cursor res = db.rawQuery("select * from "+TABLE_NAME,null);
return res;
}
以及活動中的一些代碼:
//INSERT DATA TO DATABASE
boolean isInserted = myDb.insertData(
spinnerSelection,
spinnerSelection2,
q,
d,
formattedtime,
endtimecalc);
if(isInserted == true)
Toast.makeText(screen2.this, "Data Inserted Successfully", Toast.LENGTH_LONG).show();
else
Toast.makeText(screen2.this, "Data not Inserted", Toast.LENGTH_LONG).show();
}
});
nextButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Cursor res = myDb.getAllData();
if (res.getCount() == 0) {
//show messages
showMessage("Error", "Nothing Found");
return;
}
StringBuffer buffer = new StringBuffer();
while (res.moveToNext()) {
buffer.append("ID: " + res.getString(0)+"\n");
buffer.append("LineType: " + res.getString(1)+"\n");
buffer.append("PackageType: " + res.getString(2)+"\n");
buffer.append("Quantity: " + res.getString(3)+"\n");
buffer.append("Duration: " + res.getString(4)+"\n");
buffer.append("StartTime: " + res.getString(5)+"\n");
buffer.append("EndTime: " + res.getString(6)+"\n\n");
}
//SHOW ALL DATA
showMessage("Data", buffer.toString());
}
});
}
public void showMessage(String title,String Message){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setCancelable(true);
builder.setTitle(title);
builder.setMessage(Message);
builder.show();
}
所以,我現在需要顯示從這個活動中存儲的相同信息到一個新的。
有人有什么想法嗎?
錯誤堆棧跟蹤:
10-05 15:54:58.072 5958-5958/com.example.t_fdonnelly.pharmatest E/AndroidRuntime:致命異常:主進程:com.example.t_fdonnelly.pharmatest,PID:5958 android.database.CursorIndexOutOfBound大小為 13 在 android.database.AbstractCursor.checkPosition(AbstractCursor.java:460) 在 android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136) 在 android.database.AbstractWindowedCursor.geted50(AbstractWindow)在 com.example.t_fdonnelly.tracker.screen2$4.onClick(screen2.java:196) 在 android.view.View.performClick(View.java:5653) 在 android.view.View$PerformClick.run(View.java: 22509) 在 android.os.Handler.handleCallback(Handler.java:751) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:154) 在 android。 app.ActivityThread.main(ActivityThread.java:6144) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(Zy goteInit.java:886) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
更新代碼:
Cursor res = myDb.getAllData();
if (res.getCount() == 0) {
//show messages
showMessage("Error", "Nothing Found");
return;
}
StringBuffer buffer = new StringBuffer();
String getid = res.getString(0);
String getlt = res.getString(1);
String getpt = res.getString(2);
String getqty = res.getString(3);
String getdur = res.getString(4);
String getst = res.getString(5);
String getet = res.getString(6);
if ( res != null && res.moveToFirst()) {
do {
buffer.append(getid);
buffer.append(getlt);
buffer.append(getpt);
buffer.append(getqty);
buffer.append(getdur);
buffer.append(getst);
buffer.append(getet);
} while (res.moveToNext());
}
Intent TransferData = new Intent(getBaseContext(), screen4.class);
TransferData.putExtra("ID", getid);
TransferData.putExtra("LineType", getlt);
TransferData.putExtra("PackageType", getpt);
TransferData.putExtra("Quantity", getqty);
TransferData.putExtra("Duration", getdur);
TransferData.putExtra("Starttime",getst);
TransferData.putExtra("endtime", getet);
startActivity(TransferData);
}
});
}
當您通過 Intent 開始新活動時,您可以將字符串作為附加內容
String id = res.getString(0);
String lineType = res.getString(1);
//rest of cursor logic
sb.append("ID: ").append(id).append("\n");
sb.append("LineType: ").append(lineType).append("\n");
//rest of StringBuffer logic
Intent newActivity = new Intent(this, NewActivity.class);
newActivity.putExtra("ID", id);
newActivity.putExtra("LineType", lineType);
startActivity(newActivity);
在新活動中調用 getIntent() 方法並從中檢索它們
String id = getIntent().getStringExtra("ID");
首先
為數據庫表中的數據獲取唯一鍵,例如...
public long insertData(String linetype, String packagetype, String quantity, String duration, String starttime, String endtime) {
......
long result = db.insert(TABLE_NAME,null,contentValues);
return result;
}
在調用活動中。
long yourUniqueId = myDb.insertData(
spinnerSelection,
spinnerSelection2,
q,
d,
formattedtime,
endtimecalc);
第二
將此yourUniqueId
意圖作為putLong...etc
傳遞。 並在第二個活動中獲得它。 並獲取對應id的記錄。 並展示它。
在數據庫類中添加新方法作為。 然后在第二個活動中使用之前的 unique_id 調用它。
public Cursor getAllData(long uid) {
SQLiteDatabase db = this.getWritableDatabase();
Cursor res = db.rawQuery("select * from "+TABLE_NAME+" where ID = "+uid,null);
return res;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.