2016-11-28 6 views
0

私は条件文が少ないメソッドがあります。 if条件を追加して、NPEのクラッシュを避けることができます。 null以外のチェックを追加したif条件を単純化する方法はありますか?条件文の簡素化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'を逆に2回確認します。 elseは、最初のif( 'product == null')と同じ条件です。 – AxelH

+0

@AxelH no ...彼は製品を再び取得します – Selvin

+0

@AxelHではなく、' product = getProduct(productId); 'というコールがありますヌルかヌルではない別の機会があります。 –

答えて

0

あなたが最初​​をチェックして、DBからのフェッチのロジックを維持したい場合は、この例であれば条件を簡素化する方法はありません。

0

2つのソースから値を取得しているので、チェック(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

製品情報/詳細情報のために別の列を保管することができます。

余分な列を追加あなたのテーブルにがあります。をデフォルト値に保ちます。

あなたは、製品情報がプライマリと上記のメソッドを呼び出し、値をチェック入る前に十分な要件

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