第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

ROOM持久性庫(kù)更新和刪除不會(huì)改變?nèi)魏螙|西

ROOM持久性庫(kù)更新和刪除不會(huì)改變?nèi)魏螙|西

UYOU 2023-09-27 16:28:08
我正在編寫小型應(yīng)用程序,并為其使用空間。SQLite 包裝器。就我的代碼工作而言,有一些功能不起作用。此外,文檔似乎非常不完整,或者在某些方面是錯(cuò)誤的。例如dao注解@Update和@Delete。我慢慢地對(duì)使用這個(gè)框架感到困惑,并且我考慮重新使用 SQLite API 而不是它。您對(duì)房間有何看法?現(xiàn)在是我想問(wèn)的主要問(wèn)題。我將向您展示我的代碼,也許您會(huì)明白為什么不能正常工作。首先,我的實(shí)體和道。它應(yīng)該代表一個(gè)音頻文件。@Entity(tableName = "audiofile")public class AudioFile{    @PrimaryKey(autoGenerate = true)    private long id;    @ColumnInfo(name = "title")    private String title;    @ColumnInfo(name = "artist")    private String artist;    @ColumnInfo(name = "path")    private String path;    @ColumnInfo(name = "duration")    private long duration;@Daopublic interface AudioFileDao{    @Query("SELECT * FROM audiofile WHERE title LIKE :title")    AudioFile getAudioFile(String title);    @Query("SELECT * FROM audiofile")    List<AudioFile> getAll();    @Insert(onConflict = OnConflictStrategy.REPLACE)    void initAudioFiles(AudioFile... audioFiles);    @Update    void updateAudioFile(AudioFile... audioFiles);//        @Query("DELETE FROM audiofile WHERE id = :audioFileId")    @Delete    void deleteAudioFile(AudioFile audioFile);    @Insert    void insertAll(AudioFile... audioFiles);    @Insert    long insertAudioFile(AudioFile audioFile);}那是常規(guī)的數(shù)據(jù)庫(kù)管理器。@Database(entities = {AudioFile.class}, version = 1)public abstract class DbManager extends RoomDatabase{    private static DbManager INSTANCE;    public abstract AudioFile.AudioFileDao audioFileDao();    public static DbManager getDbManager(Context ctx){        if (INSTANCE == null){            INSTANCE = Room.databaseBuilder(ctx.getApplicationContext(), DbManager.class, "playlist").build();        }        return INSTANCE;    }    public static void destroyInstance(){        INSTANCE = null;    }}
查看完整描述

1 回答

?
慕標(biāo)琳琳

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超9個(gè)贊

現(xiàn)在是我想問(wèn)的主要問(wèn)題。我將向您展示我的代碼,也許您會(huì)明白為什么不能正常工作。


我相信您的問(wèn)題是,當(dāng)您插入 AudioFile 時(shí),未設(shè)置 id,因此 AudioFile 對(duì)象 audioFile 中的 id 為 0。但是,插入時(shí),id 將自動(dòng)生成,并且不會(huì)為 0,而可能是某個(gè)時(shí)間插入的 AudioFile 對(duì)象的數(shù)量 + 1。


如果不設(shè)置id,則使用相同的 AudioFile 對(duì)象來(lái)更新/刪除將嘗試使用0的 id 來(lái)更新刪除。不會(huì)有這樣的行。


假設(shè)AudioFile 存在setId方法,但不處理失敗的插入,可以使用以下修復(fù):-


audioFile.setId(audioFileDao.insertAudioFile(audioFile));

可以處理未導(dǎo)致異常的失敗插入的修復(fù)可能是:-


long insertedId = audioFileDao.insertAudioFile(audioFile);

if (insertedId > 0) {

    audioFile.setId(insertedId);

} else {

    //......... handle not inserted

}

示例/演示

以下代碼運(yùn)行時(shí)顯示上述內(nèi)容(您的 Entity 和 Dao 已按原樣復(fù)制):-


    ...... database built

    mAudioFileDao = mAppDB.audioFileDao();


    AudioFile a = new AudioFile();

    a.setTitle("MySong");

    a.setDuration(5);

    a.setArtist("Fred");

    a.setPath("/thepath");


    logAudioFile(a,"Before Insert into DB");

    long currentId = mAudioFileDao.insertAudioFile(a); //<<<<<<<<<< INSERT INTO DB

    logAudioFile(a,"Immediately after Insert. ID returned from insert is " + currentId);

    a.setId(currentId); //<<<<<<<<<< SET the the id of the AudioFile object a

    logAudioFile(a,"After setting the ID to " + currentId);

    mAudioFileDao.updateAudioFile(a);

    List<AudioFile> audioFileList = mAudioFileDao.getAll();

    for (AudioFile af: audioFileList) {

        logAudioFile(af,"Extracted from DB");

    }

    mAudioFileDao.deleteAudioFile(a);

    Log.d("AUDIOFILEINFO","Attempt to delete Audio File undertaken");

    audioFileList = mAudioFileDao.getAll();

    for (AudioFile af: audioFileList) {

        logAudioFile(af,"After deletion");

    }

logAudioFile方法是: -


private void logAudioFile(AudioFile a, String extra) {

    Log.d(

            "AUDIOFILEINFO",

            "Title is " + a.getTitle() +

                    " ID is " + a.getId() +

                    "\n\tExtra Info is " + extra

    );

}

結(jié)果(上面的日志):-

2019-10-06 11:03:39.757 D/AUDIOFILEINFO: Title is MySong ID is 0

        Extra Info is Before Insert into DB

2019-10-06 11:03:39.808 D/AUDIOFILEINFO: Title is MySong ID is 0

        Extra Info is Immediately after Insert. ID returned from insert is 1

2019-10-06 11:03:39.808 D/AUDIOFILEINFO: Title is MySong ID is 1

        Extra Info is After setting the ID to 1

2019-10-06 11:03:39.829 D/AUDIOFILEINFO: Title is MySong ID is 1

        Extra Info is Extracted from DB

2019-10-06 11:03:39.831 D/AUDIOFILEINFO: Attempt to delete Audio File undertaken

您對(duì)房間有何看法?

這是征求意見,所以是題外話。



查看完整回答
反對(duì) 回復(fù) 2023-09-27
  • 1 回答
  • 0 關(guān)注
  • 166 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)