如何为 Android 构建和简化 Java 代码
Posted
技术标签:
【中文标题】如何为 Android 构建和简化 Java 代码【英文标题】:how to build and simplify Java code for Android 【发布时间】:2022-01-02 09:25:39 【问题描述】:如何简化所有这些代码? 我正在创建一个搜索菜单,我想在用户退出“文本视图”时检查这些值,并将输出立即显示为下面的“回收查看器”。
一种方法是使用大量的 IF 来做到这一点。你建议 另一种方法?
我将 Roon 库用于我的应用程序数据库。
我想为此使用此代码,但我看到 IF 的数量非常多。
朋友建议在数据库中使用Case,但我不知道它的代码怎么写!
public void searchHelper()
String sOperationValue = spinnerOperation.getText().toString();
String sTraderValue = spinnerTraderName.getText().toString();
String sSearchByValue = spinnerSearchBy.getText().toString();
long startValue = Long.parseLong(etStartDate.getText().toString());
long endValue = Long.parseLong(etEndDate.getText().toString());
// * * * * *
if (!sOperationValue.isEmpty() &&
!sTraderValue.isEmpty() &&
!sSearchByValue.isEmpty() &&
startValue >= 14000000 &&
endValue <= 15000000)
// * - * * *
if (!sOperationValue.isEmpty() &&
sTraderValue.isEmpty() &&
!sSearchByValue.isEmpty() &&
startValue >= 14000000 &&
endValue <= 15000000)
// * - - - -
if (!sOperationValue.isEmpty() &&
sTraderValue.isEmpty() &&
sSearchByValue.isEmpty() &&
startValue <= 0 &&
endValue <= 0)
// - * * * *
if (sOperationValue.isEmpty() &&
!sTraderValue.isEmpty() &&
!sSearchByValue.isEmpty() &&
startValue >= 14000000 &&
endValue <= 15000000)
// Here 'Search By' specifies whether the search should be based on the date of registration or on the date of the transaction.
// Therefore, when Search By is empty, then the start date and end date values are also empty.
// - * - - -
if (sOperationValue.isEmpty() &&
!sTraderValue.isEmpty() &&
sSearchByValue.isEmpty() &&
startValue <= 0 &&
endValue <= 0)
// - - * * *
if (sOperationValue.isEmpty() &&
sTraderValue.isEmpty() &&
!sSearchByValue.isEmpty() &&
startValue >= 14000000 &&
endValue <= 15000000)
// - - - - -
if (sOperationValue.isEmpty() &&
sTraderValue.isEmpty() &&
sSearchByValue.isEmpty() &&
startValue <= 0 &&
endValue <= 0)
我也想用 Case 写一个查询,但是失败了。这是我写的代码
@Query("SELECT * FROM tbl_transaction" +
" WHERE CASE WHEN operation='null'" +
" THEN CASE WHEN traderName='null'" +
" THEN CASE WHEN transactionType ='null'" +
" THEN CASE WHEN startDate=14000000" +
" THEN CASE WHEN endDate=15000000" )
List<Transaction> getSearchValues(String operation, String traderName, String transactionType, long startDate, long endDate);
虽然我一直在寻找正确的解决方案,但很遗憾找不到。
提前感谢您的帮助。
【问题讨论】:
试试看how to replace many if statements in Java。 【参考方案1】:我为你缩短了它,这不是最好的方法,但它仍然有效
我会制作一个更短的版本,但需要一些时间,因为制作起来会更复杂:
public void searchHelper()
boolean b1 = spinnerOperation.getText().toString()isEmpty();
boolean b2 = spinnerTraderName.getText().toString()isEmpty();
boolean b3 = spinnerSearchBy.getText().toString()isEmpty();
boolean b4 = Long.parseLong(etStartDate.getText().toString()) >= 14000000 && Long.parseLong(etEndDate.getText().toString()) <= 15000000;
boolean b5 = Long.parseLong(etStartDate.getText().toString()) <= 0 && Long.parseLong(etEndDate.getText().toString()) <= 0;
// * * * * *
if (!b1 && !b2 && !b3 && b4)
// * - * * *
if (!b1 && b2 && !b3 && b4)
// * - - - -
if (!b1 && b2 && b3 && b5)
// - * * * *
if (b1 && !b2 && !b3 && b4)
// Here 'Search By' specifies whether the search should be based on the date of registration or on the date of the transaction.
// Therefore, when Search By is empty, then the start date and end date values are also empty.
// - * - - -
if (b1 && !b2 && b3 && b5)
// - - * * *
if (b1 && b2 && !b3 && b4)
// - - - - -
if (b1 && b2 && b3 && b5)
【讨论】:
【参考方案2】:OperationType、TraderName、SearchBy 都看起来像 Spinners。您从哪里获取数据以填充选项。如果根据您的实现方式将其硬编码到应用程序中,则它们不太可能为空,因为始终选择默认选项。您可能不需要检查它们是否为空。然后,您将主要关注 startDate 和 endDate 编辑文本。然后,您可以改用日期选择器来进一步改进。
【讨论】:
以上是关于如何为 Android 构建和简化 Java 代码的主要内容,如果未能解决你的问题,请参考以下文章
android studio,如何为发布版本制作签名的 apk(使用 KTS 构建文件的 gradle)
Firebase Cloud Messaging to Android 工作,但 iOS 失败。如何为 iOS 构建有效负载?