Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Y
YGOMobile
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
fallenstardust
YGOMobile
Commits
5ce00443
Commit
5ce00443
authored
Nov 26, 2025
by
fallenstardust
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
已添加对 deckFileList 的空值和元素有效性判断;
使用 synchronized 关键字确保对 originalData 的线程安全访问; 日志增强以便于排查问题; 添加了提前退出条件和循环控制优化性能;
parent
047a42e4
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
31 additions
and
19 deletions
+31
-19
mobile/src/main/java/cn/garymb/ygomobile/ui/cards/deck_square/DeckSquareApiUtil.java
...ymb/ygomobile/ui/cards/deck_square/DeckSquareApiUtil.java
+31
-19
No files found.
mobile/src/main/java/cn/garymb/ygomobile/ui/cards/deck_square/DeckSquareApiUtil.java
View file @
5ce00443
package
cn.garymb.ygomobile.ui.cards.deck_square
;
package
cn.garymb.ygomobile.ui.cards.deck_square
;
import
static
cn
.
garymb
.
ygomobile
.
ui
.
cards
.
DeckManagerFragment
.
originalData
;
import
static
cn
.
garymb
.
ygomobile
.
ui
.
cards
.
deck_square
.
DeckSquareFileUtil
.
toDeckItemList
;
import
static
cn
.
garymb
.
ygomobile
.
ui
.
cards
.
deck_square
.
DeckSquareFileUtil
.
toDeckItemList
;
import
android.widget.Toast
;
import
android.widget.Toast
;
...
@@ -64,7 +63,6 @@ public class DeckSquareApiUtil {
...
@@ -64,7 +63,6 @@ public class DeckSquareApiUtil {
/**
/**
* 如果未登录(不存在token),显示toast提示用户。如果已登录,返回token
* 如果未登录(不存在token),显示toast提示用户。如果已登录,返回token
*
*/
*/
public
static
LoginToken
getLoginData
()
{
public
static
LoginToken
getLoginData
()
{
String
serverToken
=
SharedPreferenceUtil
.
getServerToken
();
String
serverToken
=
SharedPreferenceUtil
.
getServerToken
();
...
@@ -521,41 +519,55 @@ public class DeckSquareApiUtil {
...
@@ -521,41 +519,55 @@ public class DeckSquareApiUtil {
}
}
public
static
void
deleteDecks
(
List
<
DeckFile
>
deckFileList
)
{
public
static
void
deleteDecks
(
List
<
DeckFile
>
deckFileList
)
{
if
(
deckFileList
==
null
||
deckFileList
.
isEmpty
())
{
LogUtil
.
w
(
TAG
,
"尝试删除卡组但列表为空"
);
return
;
}
if
(
SharedPreferenceUtil
.
getServerToken
()
!=
null
)
{
if
(
SharedPreferenceUtil
.
getServerToken
()
!=
null
)
{
LoginToken
loginToken
=
new
LoginToken
(
LoginToken
loginToken
=
new
LoginToken
(
SharedPreferenceUtil
.
getServerUserId
(),
SharedPreferenceUtil
.
getServerUserId
(),
SharedPreferenceUtil
.
getServerToken
()
SharedPreferenceUtil
.
getServerToken
()
);
);
// 使用VUiKit避开UI线程进行网络请求
VUiKit
.
defer
().
when
(()
->
{
VUiKit
.
defer
().
when
(()
->
{
// 先判断缓存表是否需要更新
List
<
MyOnlineDeckDetail
>
originalData
=
DeckManagerFragment
.
getOriginalData
();
if
(
DeckManagerFragment
.
getOriginalData
().
isEmpty
())
{
// 同步获取在线卡组列表(在后台线程中可以安全执行网络操作)
synchronized
(
originalData
)
{
// 加锁防止并发修改
MyDeckResponse
result
=
DeckSquareApiUtil
.
getUserDecks
(
loginToken
);
if
(
originalData
.
isEmpty
())
{
if
(
result
!=
null
&&
result
.
getData
()
!=
null
)
{
MyDeckResponse
result
=
DeckSquareApiUtil
.
getUserDecks
(
loginToken
);
DeckManagerFragment
.
getOriginalData
().
addAll
(
result
.
getData
());
if
(
result
!=
null
&&
result
.
getData
()
!=
null
)
{
originalData
.
addAll
(
result
.
getData
());
}
}
}
}
// 处理删除标记
for
(
DeckFile
deleteDeckFile
:
deckFileList
)
{
for
(
MyOnlineDeckDetail
onlineDeckDetail
:
originalData
)
{
if
(
deleteDeckFile
.
getName
().
equals
(
onlineDeckDetail
.
getDeckName
())
&&
deleteDeckFile
.
getTypeName
().
equals
(
onlineDeckDetail
.
getDeckType
()))
{
onlineDeckDetail
.
setDelete
(
true
);
for
(
DeckFile
deleteDeckFile
:
deckFileList
)
{
if
(
deleteDeckFile
==
null
)
continue
;
for
(
MyOnlineDeckDetail
onlineDeckDetail
:
originalData
)
{
if
(
deleteDeckFile
.
getName
()
!=
null
&&
deleteDeckFile
.
getTypeName
()
!=
null
&&
deleteDeckFile
.
getName
().
equals
(
onlineDeckDetail
.
getDeckName
())
&&
deleteDeckFile
.
getTypeName
().
equals
(
onlineDeckDetail
.
getDeckType
()))
{
deleteDeckFile
.
setDeckId
(
onlineDeckDetail
.
getDeckId
());
onlineDeckDetail
.
setDelete
(
true
);
deleteDeckFile
.
setDeckId
(
onlineDeckDetail
.
getDeckId
());
break
;
// 匹配成功即跳出内层循环
}
}
}
}
}
}
}
// 执行同步操作(在UI线程不得不进行网络请求,须转在后台线程)
syncMyDecks
(
toDeckItemList
(
originalData
),
loginToken
);
syncMyDecks
(
toDeckItemList
(
originalData
),
loginToken
);
return
true
;
return
true
;
}).
fail
((
e
)
->
{
}).
fail
((
e
)
->
{
LogUtil
.
e
(
TAG
,
"删除卡组失败!
原因:"
+
e
);
LogUtil
.
e
(
TAG
,
"删除卡组失败!
"
,
e
);
// 增强日志输出
}).
done
((
result
)
->
{
}).
done
((
result
)
->
{
LogUtil
.
d
(
TAG
,
"卡组删除同步成功"
);
LogUtil
.
d
(
TAG
,
"卡组删除同步成功"
);
});
});
}
else
{
LogUtil
.
w
(
TAG
,
"服务器 Token 无效,无法执行删除操作"
);
}
}
}
}
}
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment