我有一个有条件语句的方法。我添加了IF条件,因此可以避免NPE崩溃。有什么办法可以简化我添加了非零检查的条件?
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);
}
}
如果要保持首先检查 ProductComboUtils
的逻辑,然后从db中获取。
由于您从两个来源获取值,所以我只需创建一种方法来使用检查(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 ...
}
您可以保留一个单独的列以获取产品信息/详细信息。
在表中添加额外的列 iSupdated ,并保留 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,然后继续,否则请提示用户以获取任何可用信息。