traintime_pda icon indicating copy to clipboard operation
traintime_pda copied to clipboard

[Bug] 小组件不显示考试信息

Open SolitaryDream-X opened this issue 3 months ago • 16 comments

既然能把考试信息列入到日程表里,没理由小组件里列不出来吧, 而且物理实验不也都实现列入日程表里和小组件里了吗

SolitaryDream-X avatar Nov 07 '25 10:11 SolitaryDream-X

肯定有理由列出来啊,我代码都写着呢,能加载实验信息和考试信息。小部件如果加载某个信息失败了,应该会有报错的。

BenderBlog avatar Nov 07 '25 13:11 BenderBlog

肯定有理由列出来啊,我代码都写着呢,能加载实验信息和考试信息。小部件如果加载某个信息失败了,应该会有报错的。

非常不幸,我没有看到列出来过,我以为没做这个功能

SolitaryDream-X avatar Nov 07 '25 14:11 SolitaryDream-X

这是和老电表的组件图片,并没有显示考试信息 Screenshot_2025_1104_220739.png

SolitaryDream-X avatar Nov 07 '25 14:11 SolitaryDream-X

强制清缓重启后的报错信息,手动设置时间到有考试的那天

[exception] | 22:20:01 957ms | 
Instance of 'NotFetchLibraryException'
StackTrace: #0      LibrarySession.initSession (package:watermeter/repository/xidian_ids/library_session.dart:220)
<asynchronous suspension>
#1      LibrarySession.getBorrowList (package:watermeter/repository/xidian_ids/library_session.dart:112)
<asynchronous suspension>
#2      Future.wait.<anonymous closure> (dart:async/future.dart:525)
<asynchronous suspension>
#3      update.<anonymous closure> (package:watermeter/page/homepage/refresh.dart:100)
<asynchronous suspension>
#4      Future.wait.<anonymous closure> (dart:async/future.dart:525)
<asynchronous suspension>
#5      update (package:watermeter/page/homepage/refresh.dart:82)
<asynchronous suspension>
#6      _HomePageMasterState._loginAsync (package:watermeter/page/homepage/home.dart:96)
<asynchronous suspension>
}
[exception] | 22:23:07 76ms | 
Instance of 'NotFetchLibraryException'
StackTrace: #0      LibrarySession.initSession (package:watermeter/repository/xidian_ids/library_session.dart:220)
<asynchronous suspension>
#1      LibrarySession.getBorrowList (package:watermeter/repository/xidian_ids/library_session.dart:112)
<asynchronous suspension>
#2      Future.wait.<anonymous closure> (dart:async/future.dart:525)
<asynchronous suspension>
#3      update.<anonymous closure> (package:watermeter/page/homepage/refresh.dart:100)
<asynchronous suspension>
#4      Future.wait.<anonymous closure> (dart:async/future.dart:525)
<asynchronous suspension>
#5      update (package:watermeter/page/homepage/refresh.dart:82)
<asynchronous suspension>
#6      _HomePageMasterState._loginAsync (package:watermeter/page/homepage/home.dart:96)
<asynchronous suspension>
}
DioException [request cancelled]: The request was manually cancelled by the user.
Error: Offline mode, all ids function unuseable.
StackTrace: #0      DioMixin.fetch (package:dio/src/dio_mixin.dart:523)
<asynchronous suspension>
#1      SysjSession.getDataFromSysj (package:watermeter/repository/xidian_ids/sysj_session.dart:28)
<asynchronous suspension>
#2      ExperimentController.getOtherExperiment (package:watermeter/controller/experiment_controller.dart:359)
<asynchronous suspension>
#3      Future.wait.<anonymous closure> (dart:async/future.dart:525)
<asynchronous suspension>
#4      ExperimentController.get.<anonymous closure> (package:watermeter/controller/experiment_controller.dart:465)
<asynchronous suspension>
#5      ExperimentController.get (package:watermeter/controller/experiment_controller.dart:465)
<asynchronous suspension>
}
DioException [request cancelled]: The request was manually cancelled by the user.
Error: Offline mode, all ids function unuseable.
StackTrace: #0      DioMixin.fetch (package:dio/src/dio_mixin.dart:523)
<asynchronous suspension>
#1      EhallSession.isLoggedIn (package:watermeter/repository/xidian_ids/ehall_session.dart:36)
<asynchronous suspension>
#2      EhallSession.useApp.<anonymous closure> (package:watermeter/repository/xidian_ids/ehall_session.dart:78)
<asynchronous suspension>
#3      BasicLock.synchronized (package:synchronized/src/basic_lock.dart:38)
<asynchronous suspension>
#4      EhallSession.useApp (package:watermeter/repository/xidian_ids/ehall_session.dart:73)
<asynchronous suspension>
#5      ExamSession.getExamEhall (package:watermeter/repository/xidian_ids/exam_session.dart:71)
<asynchronous suspension>
#6      ExamController.get (package:watermeter/controller/exam_controller.dart:127)
<asynchronous suspension>
#7      ExamController.onReady (package:watermeter/controller/exam_controller.dart:113)
<asynchronous suspension>
}
DioException [request cancelled]: The request was manually cancelled by the user.
Error: Offline mode, all ids function unuseable.
StackTrace: #0      DioMixin.fetch (package:dio/src/dio_mixin.dart:523)
<asynchronous suspension>
#1      EhallSession.isLoggedIn (package:watermeter/repository/xidian_ids/ehall_session.dart:36)
<asynchronous suspension>
#2      EhallSession.useApp.<anonymous closure> (package:watermeter/repository/xidian_ids/ehall_session.dart:78)
<asynchronous suspension>
#3      BasicLock.synchronized (package:synchronized/src/basic_lock.dart:38)
<asynchronous suspension>
#4      EhallSession.useApp (package:watermeter/repository/xidian_ids/ehall_session.dart:73)
<asynchronous suspension>
#5      ClassTableFile.getEhall (package:watermeter/repository/xidian_ids/classtable_session.dart:286)
<asynchronous suspension>
#6      ClassTableController.updateClassTable (package:watermeter/controller/classtable_controller.dart:263)
<asynchronous suspension>
#7      ClassTableController.onReady (package:watermeter/controller/classtable_controller.dart:126)
<asynchronous suspension>
}

Screenshot_2025_1104_222854.png

Screenshot_2025_1104_222819.png

Screenshot_2025_1104_222804.png

Screenshot_2025_1104_222749.png

Screenshot_2025_1104_222833.png

SolitaryDream-X avatar Nov 07 '25 14:11 SolitaryDream-X

强制清缓重启后的报错信息,手动设置时间到有考试的那天

[exception] | 22:20:01 957ms | 
Instance of 'NotFetchLibraryException'
StackTrace: #0      LibrarySession.initSession (package:watermeter/repository/xidian_ids/library_session.dart:220)
<asynchronous suspension>
#1      LibrarySession.getBorrowList (package:watermeter/repository/xidian_ids/library_session.dart:112)
<asynchronous suspension>
#2      Future.wait.<anonymous closure> (dart:async/future.dart:525)
<asynchronous suspension>
#3      update.<anonymous closure> (package:watermeter/page/homepage/refresh.dart:100)
<asynchronous suspension>
#4      Future.wait.<anonymous closure> (dart:async/future.dart:525)
<asynchronous suspension>
#5      update (package:watermeter/page/homepage/refresh.dart:82)
<asynchronous suspension>
#6      _HomePageMasterState._loginAsync (package:watermeter/page/homepage/home.dart:96)
<asynchronous suspension>
}
[exception] | 22:23:07 76ms | 
Instance of 'NotFetchLibraryException'
StackTrace: #0      LibrarySession.initSession (package:watermeter/repository/xidian_ids/library_session.dart:220)
<asynchronous suspension>
#1      LibrarySession.getBorrowList (package:watermeter/repository/xidian_ids/library_session.dart:112)
<asynchronous suspension>
#2      Future.wait.<anonymous closure> (dart:async/future.dart:525)
<asynchronous suspension>
#3      update.<anonymous closure> (package:watermeter/page/homepage/refresh.dart:100)
<asynchronous suspension>
#4      Future.wait.<anonymous closure> (dart:async/future.dart:525)
<asynchronous suspension>
#5      update (package:watermeter/page/homepage/refresh.dart:82)
<asynchronous suspension>
#6      _HomePageMasterState._loginAsync (package:watermeter/page/homepage/home.dart:96)
<asynchronous suspension>
}
DioException [request cancelled]: The request was manually cancelled by the user.
Error: Offline mode, all ids function unuseable.
StackTrace: #0      DioMixin.fetch (package:dio/src/dio_mixin.dart:523)
<asynchronous suspension>
#1      SysjSession.getDataFromSysj (package:watermeter/repository/xidian_ids/sysj_session.dart:28)
<asynchronous suspension>
#2      ExperimentController.getOtherExperiment (package:watermeter/controller/experiment_controller.dart:359)
<asynchronous suspension>
#3      Future.wait.<anonymous closure> (dart:async/future.dart:525)
<asynchronous suspension>
#4      ExperimentController.get.<anonymous closure> (package:watermeter/controller/experiment_controller.dart:465)
<asynchronous suspension>
#5      ExperimentController.get (package:watermeter/controller/experiment_controller.dart:465)
<asynchronous suspension>
}
DioException [request cancelled]: The request was manually cancelled by the user.
Error: Offline mode, all ids function unuseable.
StackTrace: #0      DioMixin.fetch (package:dio/src/dio_mixin.dart:523)
<asynchronous suspension>
#1      EhallSession.isLoggedIn (package:watermeter/repository/xidian_ids/ehall_session.dart:36)
<asynchronous suspension>
#2      EhallSession.useApp.<anonymous closure> (package:watermeter/repository/xidian_ids/ehall_session.dart:78)
<asynchronous suspension>
#3      BasicLock.synchronized (package:synchronized/src/basic_lock.dart:38)
<asynchronous suspension>
#4      EhallSession.useApp (package:watermeter/repository/xidian_ids/ehall_session.dart:73)
<asynchronous suspension>
#5      ExamSession.getExamEhall (package:watermeter/repository/xidian_ids/exam_session.dart:71)
<asynchronous suspension>
#6      ExamController.get (package:watermeter/controller/exam_controller.dart:127)
<asynchronous suspension>
#7      ExamController.onReady (package:watermeter/controller/exam_controller.dart:113)
<asynchronous suspension>
}
DioException [request cancelled]: The request was manually cancelled by the user.
Error: Offline mode, all ids function unuseable.
StackTrace: #0      DioMixin.fetch (package:dio/src/dio_mixin.dart:523)
<asynchronous suspension>
#1      EhallSession.isLoggedIn (package:watermeter/repository/xidian_ids/ehall_session.dart:36)
<asynchronous suspension>
#2      EhallSession.useApp.<anonymous closure> (package:watermeter/repository/xidian_ids/ehall_session.dart:78)
<asynchronous suspension>
#3      BasicLock.synchronized (package:synchronized/src/basic_lock.dart:38)
<asynchronous suspension>
#4      EhallSession.useApp (package:watermeter/repository/xidian_ids/ehall_session.dart:73)
<asynchronous suspension>
#5      ClassTableFile.getEhall (package:watermeter/repository/xidian_ids/classtable_session.dart:286)
<asynchronous suspension>
#6      ClassTableController.updateClassTable (package:watermeter/controller/classtable_controller.dart:263)
<asynchronous suspension>
#7      ClassTableController.onReady (package:watermeter/controller/classtable_controller.dart:126)
<asynchronous suspension>
}

Screenshot_2025_1104_222854.png

Screenshot_2025_1104_222819.png

Screenshot_2025_1104_222804.png

Screenshot_2025_1104_222749.png

Screenshot_2025_1104_222833.png

除了图书馆服务访问错误,其他报错跟您描述的问题毫无关系。他们都是初步访问时候说 ehall 没有连接,等待片刻会自行解决。

请提供版本号:希望不是 1.5.3,这是测试版,我对里数据结构有改动。

BenderBlog avatar Nov 07 '25 16:11 BenderBlog

版本号为 1.5.4+343,但这个问题我记得1.5.2的时候就有,1.5.3+333同样存在 Screenshot_2025_1104_091238.png (图中从上到下依次为1.5.3,1.5.4,1.5.2)

SolitaryDream-X avatar Nov 08 '25 00:11 SolitaryDream-X

明白,请您降级到 1.5.2 ,如果还有问题再看。小程序代码是单独线程运行的,主程序是不可能看到日志的。所以如果还有问题,那就是我这个版本改小部件代码改炸了。

BenderBlog avatar Nov 08 '25 06:11 BenderBlog

明白,请您降级到 1.5.2 ,如果还有问题再看。小程序代码是单独线程运行的,主程序是不可能看到日志的。所以如果还有问题,那就是我这个版本改小部件代码改炸了。

那行,祝您好运

SolitaryDream-X avatar Nov 08 '25 06:11 SolitaryDream-X

明白,请您降级到 1.5.2 ,如果还有问题再看。小程序代码是单独线程运行的,主程序是不可能看到日志的。所以如果还有问题,那就是我这个版本改小部件代码改炸了。

那行,祝您好运

先别走,降级到 1.5.2 还有错误吗?

BenderBlog avatar Nov 08 '25 06:11 BenderBlog

明白,请您降级到 1.5.2 ,如果还有问题再看。小程序代码是单独线程运行的,主程序是不可能看到日志的。所以如果还有问题,那就是我这个版本改小部件代码改炸了。

那行,祝您好运

先别走,降级到 1.5.2 还有错误吗?

有的,上面那个图片里有的,叫PDA的那个就是1.5.2版本的

SolitaryDream-X avatar Nov 08 '25 06:11 SolitaryDream-X

那只能下个版本修了,我尽快吧…… 如果您还想提供更多信息,只能将手机搞进 adb 查看日志了

BenderBlog avatar Nov 08 '25 07:11 BenderBlog

我怀疑问题出在这里了。

Image Image Image

后面两个Controller没有调用更新方法

hazuki-keatsu avatar Nov 15 '25 15:11 hazuki-keatsu

我觉得应该统一管理小组件更新,在所有相关数据都准备好之后,只调用一次 HomeWidget.updateWidget(),避免异步导致的数据竞争。

hazuki-keatsu avatar Nov 15 '25 15:11 hazuki-keatsu

苹果的需要转存到公共区域,安卓的小部件直接读存储地点就行了。我高度怀疑这位的数据可能有某些地方,我的小程序会无法反序列化。接下来我需要写一个提示器,提示三大数据来源是否成功加载。

BenderBlog avatar Nov 15 '25 16:11 BenderBlog

@SolitaryDream-X 您的考试信息是不是包括了空的座位号?

有个 ios 小部件报错了,错误如下:

valueNotFound (Swift.String,
Swift.DecodingError.Context (codingPath
: [CodingKeys(stringValue:
"subject", intValue: nil),
_CodingKey(stringValue: "Index O",
intValue: 0), CodingKeys(stringValue:
"seat"
" intValue: nil)], debugDescription:
"Cannot get value of type String -- found
null value instead",
", underlyingError: nil))

AI 告诉我是考试信息的座位号没有解析成功,根据安卓小部件逻辑是派生自苹果的,很有可能问题在这里。

BenderBlog avatar Nov 26 '25 12:11 BenderBlog

@SolitaryDream-X 您的考试信息是不是包括了空的座位号?

有个 ios 小部件报错了,错误如下:

valueNotFound (Swift.String,
Swift.DecodingError.Context (codingPath
: [CodingKeys(stringValue:
"subject", intValue: nil),
_CodingKey(stringValue: "Index O",
intValue: 0), CodingKeys(stringValue:
"seat"
" intValue: nil)], debugDescription:
"Cannot get value of type String -- found
null value instead",
", underlyingError: nil))

AI 告诉我是考试信息的座位号没有解析成功,根据安卓小部件逻辑是派生自苹果的,很有可能问题在这里。

很遗憾并不是空的座位号,似乎所有的考试信息都是齐全的(考试名称,时间,教室,座位号)

SolitaryDream-X avatar Nov 26 '25 12:11 SolitaryDream-X