如何为 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)

如何为 android 构建 mupdf

如何为 android 构建 boost::locale

Firebase Cloud Messaging to Android 工作,但 iOS 失败。如何为 iOS 构建有效负载?

如何为Android,Mac和Windows平台创建Java JNI动态链接库

如何为 kivy/python apk 选择包名?