簡體   English   中英

從 SQLite 數據庫讀取數據到新的 Activity - Android Studio

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM