我正在使用一个API为我的应用程序获取一些使用Retrofit和莫希的配方。当接收到的值不为空时,一切都正常。一旦我接收到为空的东西,我的整个应用程序就停止说-缺少的值为空。
我在网上找到了这个解决方案-
object NULL_TO_EMPTY_STRING_ADAPTER {
@FromJson fun fromJson(reader: JsonReader): String {
if (reader.peek() != JsonReader.Token.NULL) {
return reader.nextString()
}
reader.nextNull<Unit>()
return ""
}
}
如果我是正确的,上面的适配器返回“”为空值?自从实现这个适配器,我的应用程序还没有崩溃。虽然,我想问,什么是最好的方式来处理这些空值从API接收。
下面是我的一个Data类的一个例子:
data class Recipe(
val vegetarian: Boolean = false,
val vegan: Boolean = false,
val glutenFree: Boolean = false,
val dairyFree: Boolean = false,
val veryHealthy: Boolean = false,
val cheap: Boolean = false,
val veryPopular: Boolean = false,
val sustainable: Boolean = false,
val lowFodmap: Boolean = false,
val weightWatcherSmartPoints: Long = 0L,
val gaps: String = "",
val preparationMinutes: Long = 0L,
val cookingMinutes: Long = 0L,
val aggregateLikes: Long = 0L,
val healthScore: Long = 0L,
val creditsText: String = "",
val license: String = "",
val sourceName: String = "",
val pricePerServing: Double = 0.0,
val extendedIngredients: List<ExtendedIngredient>? = null,
val id: Long = 0L,
val title: String = "",
val readyInMinutes: Long = 0L,
val servings: Long = 0L,
val sourceUrl: String = "",
val image: String = "",
val imageType: String = "",
val summary: String = "",
val cuisines: List<String> = listOf(""),
val dishTypes: List<String> = listOf(""),
val diets: List<String> = listOf(""),
val occasions: List<String> = listOf(""),
val instructions: String = "",
val analyzedInstructions: List<AnalyzedInstruction>? = null,
val originalId: Any? = null,
val spoonacularSourceUrl: String = "",
)
在使用此NULL_TO_EMPTY_STRING_ADAPTER适配器之前,当我从服务器接收到空值时,即使我已将数据类字段设置为空值或默认值,我的应用程序也会崩溃。
请告诉我,我希望我的应用程序进入生产时,它是完整的。谢谢。
1条答案
按热度按时间m0rkklqb1#
在我看来,在使用网络模型时处理空值的最好方法是使所有字段都为空。因此,您可以确保即使该字段为空,应用程序也不会崩溃。您可以做的是,这是一个简短的示例。
orEmpty()
是字符串特定的扩展函数,如果字符串不为空则返回字符串本身,如果字符串为空则返回空字符串。