代码之家  ›  专栏  ›  技术社区  ›  Mirjalal Edwin Dalorzo

文件室不向表中插入数据

  •  2
  • Mirjalal Edwin Dalorzo  · 技术社区  · 6 年前

    有趣的是,它有时正确地执行插入操作。我不知道为什么会发生这种情况,也不知道是怎么发生的。所以,我不知道我在哪里犯了错误。 这是我的项目文件。

    @Dao
    public interface SentFilesDao {
        @Query("SELECT id, name, type, status, dateTime FROM sent")
        LiveData<List<SentFilesEntity>> getAllSentFiles();
    
        @Insert(onConflict = OnConflictStrategy.IGNORE)
        void insert(SentFilesEntity file);
    
        @Query("DELETE FROM sent")
        void deleteAllRecords();
    }
    

    (二)SentFilesRepository.java

    public class SentFilesRepository {
        private SentFilesDao mSentFilesDao;
        private LiveData<List<SentFilesEntity>> mAllSentFiles;
    
        SentFilesRepository(Application application) {
            AppDatabase db = AppDatabase.getDatabase(application);
            mSentFilesDao = db.mSentFilesDao();
            mAllSentFiles = mSentFilesDao.getAllSentFiles();
        }
    
        LiveData<List<SentFilesEntity>> getAllSentFiles() { return mAllSentFiles; }
    
        public void insert(SentFilesEntity sentFilesEntity) {
            new SentFilesRepository.insertAsyncTask(mSentFilesDao).execute(sentFilesEntity);
        }
    
        private static class insertAsyncTask extends AsyncTask<SentFilesEntity, Void, Void> {
            private SentFilesDao mAsyncTaskDao;
    
            insertAsyncTask(SentFilesDao dao) {
                mAsyncTaskDao = dao;
            }
    
            @Override
            protected Void doInBackground(final SentFilesEntity... params) {
                mAsyncTaskDao.insert(params[0]);
                Log.e("doInBackground: ", "reached here!"); // no any log in Logcat about this. Weird...
                return null;
            }
        }
    }
    

    (三)SentFilesEntity.java

    @Entity(tableName = "sent")
    public class SentFilesEntity {
        @PrimaryKey(autoGenerate = true)
        @ColumnInfo(name = "id")
        public int s_f_id;
    
        @ColumnInfo(name = "name")
        public String s_f_name;
    
        @ColumnInfo(name = "type")
        public String s_f_type;
    
        @ColumnInfo(name = "status")
        public String s_f_operation_status;
    
        @ColumnInfo(name = "dateTime")
        public String s_f_time;
    }
    

    (四)SentFilesViewModel.java

    public class SentFilesViewModel extends AndroidViewModel {
        private SentFilesRepository mRepository;
        private LiveData<List<SentFilesEntity>> mAllSentFiles;
    
        public SentFilesViewModel(Application application) {
            super(application);
            mRepository = new SentFilesRepository(application);
            mAllSentFiles = mRepository.getAllSentFiles();
        }
    
        public LiveData<List<SentFilesEntity>> getAllSentFiles() { return mAllSentFiles; }
    
        public void insert(SentFilesEntity sentFile) { mRepository.insert(sentFile); }
    }
    

    我要做的是:

    我的程序通过wifidirect将选定的文件从一个设备发送到另一个设备。在接收或发送文件时,我想保存一些有关文件的信息(如文件名、文件类型(图像、视频、音乐、APK等)、发送/接收日期和时间)和操作(成功或失败)。我能处理所有这些事情。

    好吧,得到所有的属性(我上面提到的),不是 结束 . 主要问题是将数据保存到数据库中。为此,我创建了一些必需的文件(我在上面共享了他们的代码)。当文件发送时,我正试图将相关信息插入数据库。但它没有插入。这是我的问题。

    好吧,主要代码太长了,不能张贴在这里。不过,我把我最新的代码发布到了GitHub项目和主逻辑中 starts from here FileStatisticsActivity .

    p、 s:也许分享项目链接不是 ,我很抱歉。

    谢谢。

    0 回复  |  直到 6 年前