{"id":24756243,"url":"https://github.com/ehsannarmani/okhttpglobalerrorhandler","last_synced_at":"2025-03-23T07:16:55.963Z","repository":{"id":223358570,"uuid":"760102858","full_name":"ehsannarmani/OkHttpGlobalErrorHandler","owner":"ehsannarmani","description":"A Library For Handling OkHttp Errors Globally","archived":false,"fork":false,"pushed_at":"2024-02-20T09:38:51.000Z","size":76,"stargazers_count":6,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-28T13:54:22.267Z","etag":null,"topics":["android","api-client","error-handling","http-requests","kotlin","okhttp","okhttp-global-error-handler","okhttp3","retrofit","retrofit-global-error-handler","retrofit2"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ehsannarmani.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-02-19T19:40:28.000Z","updated_at":"2024-07-25T10:31:41.000Z","dependencies_parsed_at":"2025-01-28T14:01:36.877Z","dependency_job_id":null,"html_url":"https://github.com/ehsannarmani/OkHttpGlobalErrorHandler","commit_stats":null,"previous_names":["ehsannarmani/okhttpglobalerrorhandler"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ehsannarmani%2FOkHttpGlobalErrorHandler","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ehsannarmani%2FOkHttpGlobalErrorHandler/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ehsannarmani%2FOkHttpGlobalErrorHandler/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ehsannarmani%2FOkHttpGlobalErrorHandler/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ehsannarmani","download_url":"https://codeload.github.com/ehsannarmani/OkHttpGlobalErrorHandler/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245066714,"owners_count":20555431,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","api-client","error-handling","http-requests","kotlin","okhttp","okhttp-global-error-handler","okhttp3","retrofit","retrofit-global-error-handler","retrofit2"],"created_at":"2025-01-28T13:50:24.036Z","updated_at":"2025-03-23T07:16:55.940Z","avatar_url":"https://github.com/ehsannarmani.png","language":"Kotlin","readme":"# A Library For Handling OkHttp Errors Globally\n### A simple interceptor to catch client and server errors.\n### Using On OkHttp Client:\n```kotlin\nval client = OkHttpClient.Builder()\n    .addInterceptor(GlobalErrorHandlerInterceptor{ error-\u003e\n        when(it){\n            is GlobalError.ClientError-\u003e{\n                println(\"Client Error Caught! =\u003e ${error.error} / ${error.statusCode}\")\n            }\n            is GlobalError.ServerError-\u003e{\n                println(\"Server Error Caught! =\u003e ${error.error} / ${error.statusCode}\")\n            }\n        }\n    })\n    .build()\n```\n### Using With Retrofit:\n\u003e [!NOTE]\n\u003e add GlobalErrorHandlerInterceptor like previous sample and set that client as retrofit client.\n```kotlin\nval retrofit = Retrofit\n    .Builder()\n    .baseUrl(\"https://your_beautiful_base_url.com/\")\n    .addConverterFactory(ScalarsConverterFactory.create())\n    .client(client)\n    .build()\n```\n### Ignoring Errors On Specify EndPoints:\n\u003e Ignoring All Errors:\n```kotlin\ninterface Api {\n    @GET(\"todos/1\")\n    @IgnoreGlobalErrorHandling(ignoreStrategy = AllErrorsStrategy::class)\n    fun getTodo():Call\u003cString\u003e\n}\n```\n\u003e Ignoring Client Errors:\n```kotlin\ninterface Api {\n    @GET(\"todos/1\")\n    @IgnoreGlobalErrorHandling(ignoreStrategy = ClientErrorsStrategy::class)\n    fun getTodo():Call\u003cString\u003e\n}\n```\n\u003e Ignoring Server Errors:\n```kotlin\ninterface Api {\n    @GET(\"todos/1\")\n    @IgnoreGlobalErrorHandling(ignoreStrategy = ServerErrorsStrategy::class)\n    fun getTodo():Call\u003cString\u003e\n}\n```\n\u003e Ignoring Just Some Status Codes:\n```kotlin\ninterface Api {\n    @GET(\"todos/1\")\n    @IgnoreGlobalErrorHandling(\n        ignoreStrategy = StatusCodeStrategy::class,\n        ignoreStatusCodes = [422,501]\n    )\n    fun getTodo():Call\u003cString\u003e\n}\n```\n### More complete and better use with koin \u0026 dependency injections:\n```kotlin\nstartKoin{\n    single{\n        Channel\u003cGlobalError\u003e()\n    }\n    single{\n        val client = OkHttpClient.Builder()\n            .addInterceptor(GlobalErrorHandlerInterceptor{ error-\u003e\n                val injectedChannel:Channel\u003cGlobalError\u003e = get()\n                scope.launch{\n                    injectedChannel.send(error)\n                }\n            })\n            .build()\n        Retrofit\n            .Builder()\n            ...\n            .client(client)\n            .build()\n    }\n}\n```\n#### In View Side or etc:\n``` kotlin\nclass MainActivity: AppCompatActivity{\n    val injectedChannel:Channel\u003cGlobalError\u003e by inject()\n    \n    override fun onCreate(savedInstanceState: Bundle?){\n        ...\n        injectedChannel.receiveAsFlow().collect { error -\u003e\n            when(error){\n                is GlobalError.ClientError-\u003e{\n                    if(error.statusCode == 401){\n                        // Show toast\n                        // logout\n                        // navigate to login screen\n                    }\n                }\n                is GlobalError.ServerError-\u003e{\n                    // show server error\n                }\n            }\n        }\n    }\n}\n```\n\u003e In this example, Any api of yours that gives a status code of 401 will cause the user to log out and navigate to log in screen.\n\n## Setup\n[![](https://jitpack.io/v/ehsannarmani/OkHttpGlobalErrorHandler.svg)](https://jitpack.io/#ehsannarmani/OkHttpGlobalErrorHandler)\n```kotlin\nrepositories{\n    ...\n    maven(\"https://jitpack.io\")\n}\ndependencies{\n    implementation(\"com.github.ehsannarmani:OkHttpGlobalErrorHandler:latest\")\n}\n```\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fehsannarmani%2Fokhttpglobalerrorhandler","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fehsannarmani%2Fokhttpglobalerrorhandler","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fehsannarmani%2Fokhttpglobalerrorhandler/lists"}