我有新闻列表。每个新闻都有作者ID,我需要从新闻中获取作者ID,然后打电话给作者获取他的名字并为每个新闻设置作者姓名。
看起来很简单,但它确实有效,但是一些作者的名字是空的,并且app会抛出一个exepcion。因此,如果作者姓名为空,我需要检查新闻列表中的每个项目,将其替换为" unknown"串。我的变种不起作用。
null
答案 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。