Beim Erstellen einer nativen App auf Android oder iOS denke ich, dass sie die meiste Zeit über eine API mit einer Art Server kommuniziert. Wenn Sie jedoch nicht gut mit den API-Daten umgehen, Es stürzt ab oder soll eine instabile App sein, die seltsam funktioniert. Dieses Mal werden wir die bisher aufgetretenen Abstürze / Fehlfunktionen zusammenfassen und Maßnahmen einführen, um ein Abstürzen zu verhindern.
Der Server gibt nicht immer 200 zurück (normales System). Wenn Sie eine betrügerische Anfrage senden, wird 404 oder 422 zurückgegeben. Wenn auf den Server zu viel zugegriffen wird und er nicht verfügbar ist, wird ein Fehler zurückgegeben. Es gibt nichts zurück und kann eine Zeitüberschreitung verursachen.
Wenn zu diesem Zeitpunkt die Überlegung, was zu tun ist, wenn ein Fehlerwert zurückgegeben wird, weggelassen wird, kann dies aufgrund eines Analysefehlers fallen, oder verschiedene Werte können sich im Zustand Null oder Anfangswert bewegen, was zu einem abnormalen Betrieb führt.
Stellen Sie sicher, dass Sie die Fehlerbehandlung hinzufügen, wenn ein Fehler der Serie 400 oder 500 zurückgegeben wird. Wenn das Parsen fehlschlägt, wird es als Fehler behandelt und der Benutzer wird benachrichtigt, dass ein Kommunikationsfehler vorliegt.
Bei der Festlegung der Spezifikationen mit dem Entwickler auf der Serverseite Möglicherweise wird Ihnen mitgeteilt: "Dieser Wert ist nicht vorhanden, wenn er null ist. Sie müssen also nicht nach null suchen." Glaube diesen Worten nicht. Die Person hat nicht immer einen vollständigen Überblick über die Datenspezifikationen. ** Möglicherweise repariert nicht das Teil das Teil später **
Da wir nicht wissen, wann null zurückgegeben wird, sollten alle Datenklassen, die die Antwort erhalten, Nullable und String sein.
UserApiData.kt
data class UserApiData(
val id : String?,
val name : String?,
val age : String?,
val birthDay : String?
)
(Geschrieben in Kotlin)
Wenn Sie dies jedoch tun, müssen Sie jedes Mal, wenn Sie es in der Anwendung verwenden, eine Nullprüfung und eine Typkonvertierung durchführen, und der Code wird sehr kompliziert. aus diesem Grund, ① Datenklasse, die die Antwort empfängt ② In der App verwendete Datenklasse Erstellen Sie zwei und erstellen Sie eine Konvertierungsmethode, die ① zu ② erstellt.
User.kt
data class User(
val id : String,
val name : String,
val age : Int,
val birthDay : Date
)
UserConverter.kt
class UserConverter(){
fun convert(data: UserApiData): User {
if (data.id == null) throw IllegalArgumentException("user_id is null")
return User(
data.id,
data.name ?: "",
data.age?.toIntOrNull() ?: 0,
parseData(data.birthDay)
)
}
}
Bei dieser Konvertierungsmethode wird eine Nullprüfung durchgeführt und der Wert in Form von NonNull eingegeben. Wenn Sie in der Null stecken bleiben, überprüfen Sie dort
Je nach Fall verwenden wir die Korrespondenz wie. Anschließend können Sie ** an einer Stelle eine Nullprüfung durchführen, während Sie die Antwort vom Server ordnungsgemäß empfangen **.
Dies führt zu einem Fehler beim Definieren von Anforderungen. In Java werden int und boolean zunächst auf 0 bzw. false gesetzt und sind nicht null. Es wird unter der Annahme implementiert, dass ein anderer Wert als 0 von api stammt. Wenn der Wert nicht kommt, wird der Prozess so wie er ist mit 0 ausgeführt.
Sie können es wie ↑ auf String setzen oder es mit der Wrapper-Klasse Int, Boolean anstelle des primitiven Typs int, boolean empfangen.
Wenn Sie dies tun, ist der Anfangswert null. Wenn sich der Anfangswert also nicht unbeabsichtigt ändert, tritt anstelle einer unzulässigen Operation ein Absturz oder Fehler auf.
Ich möchte auch Abstürze / Fehler verhindern, aber dies ist immer noch besser, da es in Crashlytics enthalten ist und beim Testen leichter zu erkennen ist.
Eigentlich gibt es einige Maßnahmen, die nicht durch Anpassen der Montagezeit und der Spezifikationen ergriffen werden können, aber ich denke, es wäre gut, wenn wir so viele Maßnahmen wie möglich ergreifen könnten, um eine stabile App zu erstellen.
Recommended Posts