Skip to content

Instantly share code, notes, and snippets.

View sberoch's full-sized avatar

Santiago Beroch sberoch

  • Zarate, Buenos Aires, Argentina
View GitHub Profile
@HiltAndroidApp
class MainApplication : Application()
{
"info": {
"count": 591,
"pages": 20,
"next": "https://rickandmortyapi.com/api/character/?page=2",
"prev": null
},
"results": [
// ...
]
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
//...
}
@AndroidEntryPoint
class CharacterDetailFragment : Fragment() {
//...
}
@Module
@InstallIn(ApplicationComponent::class)
object AppModule {
@Singleton
@Provides
fun provideRetrofit(gson: Gson) : Retrofit = Retrofit.Builder()
.baseUrl("https://rickandmortyapi.com/api/")
.addConverterFactory(GsonConverterFactory.create(gson))
.build()
class CharacterRepository @Inject constructor(
private val remoteDataSource: CharacterRemoteDataSource,
private val localDataSource: CharacterDao
) {
//...
}
class CharactersViewModel @ViewModelInject constructor(
private val repository: CharacterRepository
) : ViewModel() {
val characters: LiveData<Resource<List<Character>>> = repository.getCharacters()
}
data class Resource<out T>(val status: Status, val data: T?, val message: String?) {
enum class Status {
SUCCESS,
ERROR,
LOADING
}
companion object {
fun <T> success(data: T): Resource<T> {
viewModel.characters.observe(viewLifecycleOwner, Observer {
when (it.status) {
Resource.Status.SUCCESS -> {
progress_bar.visibility = View.GONE
if (!it.data.isNullOrEmpty()) adapter.setItems(ArrayList(it.data))
}
Resource.Status.ERROR ->
Toast.makeText(activity, it.message, Toast.LENGTH_SHORT).show()
Resource.Status.LOADING ->
interface CharacterService {
@GET("character")
suspend fun getAllCharacters() : Response<CharacterList>
@GET("character/{id}")
suspend fun getCharacter(@Path("id") id: Int): Response<Character>
}