Skip to content

Commit f5be7ad

Browse files
committed
Added API error response exception handling
1 parent 174c7fd commit f5be7ad

File tree

5 files changed

+54
-7
lines changed

5 files changed

+54
-7
lines changed

app/build.gradle

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ android {
1111
applicationId "com.gomsang.lab.nearmask"
1212
minSdkVersion 22
1313
targetSdkVersion 29
14-
versionCode 4
15-
versionName "1.3"
14+
versionCode 5
15+
versionName "1.4"
1616

1717
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
1818
}

app/src/main/java/com/gomsang/lab/publicmask/libs/http/mask/Mask.kt

+45-2
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,60 @@
11
package com.gomsang.lab.publicmask.libs.http.mask
22

33
import com.gomsang.lab.publicmask.libs.constants.WebAddresses
4-
import com.gomsang.lab.publicmask.libs.http.kakao.KakaoAPI
4+
import com.google.gson.Gson
5+
import com.google.gson.GsonBuilder
6+
import com.google.gson.TypeAdapter
7+
import com.google.gson.TypeAdapterFactory
8+
import com.google.gson.reflect.TypeToken
9+
import com.google.gson.stream.JsonReader
10+
import com.google.gson.stream.JsonToken
11+
import com.google.gson.stream.JsonWriter
512
import retrofit2.Retrofit
613
import retrofit2.converter.gson.GsonConverterFactory
14+
import java.io.IOException
15+
716

817
class Mask {
918
val api: MaskAPI
1019

1120
constructor() {
21+
22+
class StringAdapter : TypeAdapter<String?>() {
23+
@Throws(IOException::class)
24+
override fun read(reader: JsonReader): String {
25+
if (reader.peek() === JsonToken.NULL) {
26+
reader.nextNull()
27+
return ""
28+
}
29+
return reader.nextString()
30+
}
31+
32+
@Throws(IOException::class)
33+
override fun write(writer: JsonWriter, value: String?) {
34+
if (value == null) {
35+
writer.nullValue()
36+
return
37+
}
38+
writer.value(value)
39+
}
40+
}
41+
42+
43+
class NullStringToEmptyAdapterFactory<T> : TypeAdapterFactory {
44+
override fun <T> create(gson: Gson, type: TypeToken<T>): TypeAdapter<T>? {
45+
val rawType = type.rawType as Class<T>
46+
return if (rawType != String::class.java) {
47+
null
48+
} else StringAdapter() as TypeAdapter<T>
49+
}
50+
}
51+
52+
val gson =
53+
GsonBuilder().registerTypeAdapterFactory(NullStringToEmptyAdapterFactory<Any>()).create()
54+
1255
val retrofit: Retrofit = Retrofit.Builder()
1356
.baseUrl(WebAddresses.URL_MASK_API)
14-
.addConverterFactory(GsonConverterFactory.create())
57+
.addConverterFactory(GsonConverterFactory.create(gson))
1558
.build()
1659
api = retrofit.create<MaskAPI>(MaskAPI::class.java)
1760
}

app/src/main/java/com/gomsang/lab/publicmask/libs/util/StatUtil.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ object StatUtil {
88
"few" -> return "1+"
99
"empty" -> return "재고소진"
1010
}
11-
return "error"
11+
return "에러"
1212
}
1313
fun convertStatToDetailString(stat : String): String{
1414
when (stat) {
@@ -17,7 +17,7 @@ object StatUtil {
1717
"few" -> return "1개 이상 30개 미만"
1818
"empty" -> return "재고소진"
1919
}
20-
return "error"
20+
return "에러"
2121
}
2222

2323
fun convertTypeToString(type : String): String {

app/src/main/java/com/gomsang/lab/publicmask/ui/map/MapFragment.kt

+4
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ class MapFragment : BaseFragment<FragmentMapBinding, MapViewModel>(), OnMapReady
6666

6767
stocks.forEach { stock ->
6868
Logger.log("CAMERA_CHANGED", Gson().toJson(stock))
69+
if (stock.remainStat == null) stock.remainStat = ""
6970
val infoWindow = InfoWindow()
7071
infoWindow.adapter = object : InfoWindow.DefaultTextAdapter(context!!) {
7172
override fun getText(infoWindow: InfoWindow): CharSequence {
@@ -88,6 +89,9 @@ class MapFragment : BaseFragment<FragmentMapBinding, MapViewModel>(), OnMapReady
8889
marker.icon = MarkerIcons.RED
8990
"empty" ->
9091
marker.icon = MarkerIcons.GRAY
92+
else -> {
93+
marker.icon = MarkerIcons.GRAY
94+
}
9195
}
9296
marker.map = map
9397
infoWindow.open(marker)

app/src/main/java/com/gomsang/lab/publicmask/ui/search/SearchFragment.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ class SearchFragment : BaseFragment<FragmentSearchBinding, SearchViewModel>() {
9797
}
9898

9999
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
100-
if (!viewModel.latestSearchKeyword.equals(s.toString())) {
100+
if (viewModel.latestSearchKeyword != s.toString()) {
101101
layoutSwitch(false)
102102
}
103103
}

0 commit comments

Comments
 (0)