Skip to content

Commit 5e57df9

Browse files
committed
add error handling
1 parent aaaadd3 commit 5e57df9

File tree

5 files changed

+43
-11
lines changed

5 files changed

+43
-11
lines changed

10-mars-photos/.idea/deploymentTargetDropDown.xml

+6-6
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

10-mars-photos/app/src/main/java/com/example/android/marsphotos/BindingAdapters.kt

+19
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
package com.example.android.marsphotos
22

3+
import android.view.View
34
import android.widget.ImageView
45
import androidx.core.net.toUri
56
import androidx.databinding.BindingAdapter
67
import androidx.recyclerview.widget.RecyclerView
78
import com.bumptech.glide.Glide
89
import com.bumptech.glide.request.RequestOptions
910
import com.example.android.marsphotos.network.MarsPhoto
11+
import com.example.android.marsphotos.overview.MarsApiStatus
1012
import com.example.android.marsphotos.overview.PhotoGridAdapter
1113

1214
@BindingAdapter("imageUrl")
@@ -26,4 +28,21 @@ fun bindImage(imgView: ImageView, imgUrl: String?) {
2628
fun bindRecyclerView(recyclerView: RecyclerView, data: List<MarsPhoto>?) {
2729
val adapter = recyclerView.adapter as PhotoGridAdapter
2830
adapter.submitList(data)
31+
}
32+
33+
@BindingAdapter("marsApiStatus")
34+
fun bindStatus(statusImageView: ImageView, status: MarsApiStatus?) {
35+
when (status) {
36+
MarsApiStatus.LOADING -> {
37+
statusImageView.visibility = View.VISIBLE
38+
statusImageView.setImageResource(R.drawable.loading_animation)
39+
}
40+
MarsApiStatus.ERROR -> {
41+
statusImageView.visibility = View.VISIBLE
42+
statusImageView.setImageResource(R.drawable.ic_connection_error)
43+
}
44+
MarsApiStatus.DONE -> {
45+
statusImageView.visibility = View.GONE
46+
}
47+
}
2948
}

10-mars-photos/app/src/main/java/com/example/android/marsphotos/overview/OverviewViewModel.kt

+9-4
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,19 @@ import com.example.android.marsphotos.network.MarsApi
2424
import com.example.android.marsphotos.network.MarsPhoto
2525
import kotlinx.coroutines.launch
2626

27+
enum class MarsApiStatus { LOADING, ERROR, DONE }
28+
2729
/**
2830
* The [ViewModel] that is attached to the [OverviewFragment].
2931
*/
3032
class OverviewViewModel : ViewModel() {
3133

3234
// The internal MutableLiveData that stores the status of the most recent request
33-
private val _status = MutableLiveData<String>()
35+
private val _status = MutableLiveData<MarsApiStatus>()
3436

3537
// The external immutable LiveData for the request status
36-
val status: LiveData<String> = _status
38+
val status: LiveData<MarsApiStatus>
39+
get() = _status
3740

3841
// LiveData for a single MarsProperty object
3942
/*private val _property = MutableLiveData<MarsPhoto>()
@@ -58,16 +61,18 @@ class OverviewViewModel : ViewModel() {
5861
*/
5962
private fun getMarsPhotos() {
6063
viewModelScope.launch {
64+
_status.value = MarsApiStatus.LOADING
6165
try {
6266
// val listResult = MarsApi.retrofitService.getPhotos()
6367
// _status.value = "Success: ${listResult.size} Mars photos retrieved"
6468
/*if (listResult.isNotEmpty()) {
6569
//_property.value = listResult[0]
6670
}*/
6771
_properties.value = MarsApi.retrofitService.getPhotos()
68-
_status.value = "Success: Mars properties retrived"
72+
_status.value = MarsApiStatus.DONE
6973
} catch (e: Exception) {
70-
_status.value = "Failure: ${e.message}"
74+
_status.value = MarsApiStatus.ERROR
75+
_properties.value = ArrayList()
7176
}
7277
}
7378
}

10-mars-photos/app/src/main/res/layout/fragment_overview.xml

+9-1
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,14 @@
5353
app:spanCount="2"
5454
tools:itemCount="16"
5555
tools:listitem="@layout/grid_view_item"/>
56-
56+
<ImageView
57+
android:id="@+id/status_image"
58+
android:layout_width="wrap_content"
59+
android:layout_height="wrap_content"
60+
app:layout_constraintBottom_toBottomOf="parent"
61+
app:layout_constraintLeft_toLeftOf="parent"
62+
app:layout_constraintRight_toRightOf="parent"
63+
app:layout_constraintTop_toTopOf="parent"
64+
app:marsApiStatus="@{viewModel.status}" />
5765
</androidx.constraintlayout.widget.ConstraintLayout>
5866
</layout>

10-mars-photos/screenshot.png

5.41 MB
Loading

0 commit comments

Comments
 (0)