检查列表中每个项目的空值

时间:2016-11-03 23:30:36

标签: android null nullreferenceexception

我有新闻列表。每个新闻都有作者ID,我需要从新闻中获取作者ID,然后打电话给作者获取他的名字并为每个新闻设置作者姓名。

看起来很简单,但它确实有效,但是一些作者的名字是空的,并且app会抛出一个exepcion。因此,如果作者姓名为空,我需要检查新闻列表中的每个项目,将其替换为" unknown"串。我的变种不起作用。

null

1 个答案:

答案 0 :(得分:1)

以下是一些常用的实用程序函数,可帮助您进行空检查。将这些添加到Utils类或其他东西。另请注意,检查String nulls与检查object nulls

不同
private static final String EMPTY = "";
private static final String NULL = "null";

/**
 * Method checks if String value is empty
 *
 * @param str
 * @return string
 */
public static boolean isStringEmpty(String str) {
    return str == null || str.length() == 0 || EMPTY.equals(str.trim()) || NULL.equals(str);
}

/**
 * Method is used to check if objects are null
 *
 * @param objectToCheck
 * @param <T>
 * @return true if objectToCheck is null
 */
public static <T> boolean checkIfNull(T objectToCheck) {
    return objectToCheck == null;
}

现在更新你的代码

.flatMap(new Func1<News, Observable<News>>() {
        @Override
        public Observable<News> call(News news) {
            return apiService.getAuthor(news.getId())
                    .doOnNext(new Action1<Author>() {
                        @Override
                        public void call(Author author) {
                            // notice how I first confirm that the object is not null 
                            // and then I check if the String value from the object is not null
                            if (!Utils.checkIfNull(author) && !Utils.isStringEmpty(author.getName()) {
                                news.setAuthorName(author.getName());
                            } else {
                                news.setAuthorName("Unknown");
                            }


                        }
                    })
                    .observeOn(Schedulers.io())
                    .map(new Func1<Author, News>() {
                        @Override
                        public News call(Author author) {
                            return news;
                        }
                    })
                    .subscribeOn(Schedulers.newThread());
        }
    })

您遇到问题的原因是您正在检查字符串文字,&#34; null&#34;不一定是String是null。