2016-11-28 69 views
0

我有一个很少有条件语句的方法。我添加了if条件,以便避免我的NPE崩溃。有什么办法可以简化添加了非空检查的条件?简化条件语句android

private void addComplementaryProductToBasket(String productId, String comboName) { 
     Product product = ProductComboUtils.getProductById(productId); 
     if (null == product) { 
      LOG.info("Product does not exist in ProductComboUtils, fetching from DB"); 
      product = getProduct(productId); 
     } 
     if (product != null){ 
      product.setPrice(BigDecimal.ZERO); 
      product.setCurrencyCode(currentBasket.getCurrencyCode()); 
      // Ensure to add comboName with purchase, this 
      currentBasket.addToPurchase(product, comboName); 
      int numberOfComplementaryProducts = 
        currentBasket.getPurchaseLineItemForProduct(product.getProductId()).getNumberOfComplementaryProducts(); 
      currentBasket.getPurchaseLineItemForProduct(product.getProductId()).setNumberOfComplementaryProducts(
        ++numberOfComplementaryProducts); 
     }else 
     { 
      CrashUtil.logNonFatalException("Product instance is null for productId: " + productId); 
     } 
    } 
+0

您检查两次'product == null'和'product!= null'。该否则是相同的条件第一,如果('产品== null') – AxelH

+0

@AxelH没有......他获得的产品再次 – Selvin

+0

不完全@AxelH,有一个叫'产品= getProduct(productId参数);'所以它有另一个机会是空或不空。 –

回答

0

没有办法,如果在这个例子中,如果条件要维护检查​​,然后再从数据库中获取的逻辑简化。

0

由于您从两个来源获取值,我只需创建一个方法来执行检查(Utlis或DB)。

public Product getProductTest(String productId){ 
    Product product = ProductComboUtils.getProductById(productId); 
    if (null == product) { 
     LOG.info("Product does not exist in ProductComboUtils, fetching from DB"); 
     product = getProduct(productId); 
    } 
    return product; 
} 

然后你只需要得到的价值和检查值。如果这是null则出现问题,并显示错误。

private void addComplementaryProductToBasket(String productId, String comboName) { 
     Product product = getProductTest(productId); 
     if (product != null){ 
      .... 
     } else ... 
} 
+0

@Selvin该死的......没看到...... – AxelH

+0

@Selvin,只需编辑我的回答改变的解决方案,如果你是downvote它的人,请读一遍,并告诉我,如果这是更好的。 – AxelH

0

你可以保持对产品信息/详细可用性单独的列。

在您的表格中添加额外的列isUpdated并保留作为默认值。

当达到足够的需求更新的列值

public void isProdUpdated(int id) { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     try { 
     Cursor cursor = db.rawQuery(selectQuery, null); // selectQuery is your complete query 
     if (cursor.getCount() != 0 
       && cursor.moveToFirst()) { 
      int status = cursor.getInt(cursor 
        .getColumnIndex(Const.KEY_IS_UPDATED)); 
      cursor.close(); 
      return status; 
     } 
     cursor.close(); 
    } catch (Exception e) { 
     return 0; 
    } 
    return 0; 
    } 

public Product getTestProduct(String productId){ 
    Product product = null; 
    if (ProductComboUtils.isProdUpdated(productId) == 1) { 
     return product = ProductComboUtils.getProductById(productId); 
    }else{ 
     LOG.info("Product does not exist in ProductComboUtils, fetching from DB"); 
     return product = getProduct(productId); 
} 
} 

获得的产品信息,请拨打上面的方法与你的小学和校验值之前。如果它返回1然后继续,否则提示用户没有可用的信息。

+0

我错过了关于这个问题的一些信息吗?当然不是的 – AxelH

+0

.. – Nas

+0

然后,我不明白为什么要加上一栏,他的表简化条件语句... – AxelH