检查列表中每个项目的空值
Check null values for each item in list
我有新闻列表。每个新闻都有作者 ID,我需要从新闻中获取作者 ID,然后调用 Author 获取他的名字并将作者的名字设置为每个新闻。
看起来很简单,而且有效,但是有些作者的名字是空的,应用程序抛出一个exepcion。因此,如果作者姓名为空,我需要检查新闻列表中的每个项目,将其替换为 "unknown" 字符串。我的变体不起作用。
.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) {
if (!author.getName().equals("null")) {
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());
}
})
以下是一些常用的实用函数,可帮助您进行空值检查。将这些添加到 Utils class 或其他东西。另请注意,检查字符串空值与检查对象空值不同
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());
}
})
您遇到问题的原因是您正在检查字符串文字,"null"不一定是字符串为空。
我有新闻列表。每个新闻都有作者 ID,我需要从新闻中获取作者 ID,然后调用 Author 获取他的名字并将作者的名字设置为每个新闻。
看起来很简单,而且有效,但是有些作者的名字是空的,应用程序抛出一个exepcion。因此,如果作者姓名为空,我需要检查新闻列表中的每个项目,将其替换为 "unknown" 字符串。我的变体不起作用。
.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) {
if (!author.getName().equals("null")) {
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());
}
})
以下是一些常用的实用函数,可帮助您进行空值检查。将这些添加到 Utils class 或其他东西。另请注意,检查字符串空值与检查对象空值不同
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());
}
})
您遇到问题的原因是您正在检查字符串文字,"null"不一定是字符串为空。