{"action":"created","issue":{"url":"https://api.github.com/repos/square/retrofit/issues/2856","repository_url":"https://api.github.com/repos/square/retrofit","labels_url":"https://api.github.com/repos/square/retrofit/issues/2856/labels{/name}","comments_url":"https://api.github.com/repos/square/retrofit/issues/2856/comments","events_url":"https://api.github.com/repos/square/retrofit/issues/2856/events","html_url":"https://github.com/square/retrofit/issues/2856","id":350951823,"node_id":"MDU6SXNzdWUzNTA5NTE4MjM=","number":2856,"title":"Strange \"java.net.MalformedURLException: no protocol: \" error","user":{"login":"Aqluse","id":13728921,"node_id":"MDQ6VXNlcjEzNzI4OTIx","avatar_url":"https://avatars0.githubusercontent.com/u/13728921?v=4","gravatar_id":"","url":"https://api.github.com/users/Aqluse","html_url":"https://github.com/Aqluse","followers_url":"https://api.github.com/users/Aqluse/followers","following_url":"https://api.github.com/users/Aqluse/following{/other_user}","gists_url":"https://api.github.com/users/Aqluse/gists{/gist_id}","starred_url":"https://api.github.com/users/Aqluse/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Aqluse/subscriptions","organizations_url":"https://api.github.com/users/Aqluse/orgs","repos_url":"https://api.github.com/users/Aqluse/repos","events_url":"https://api.github.com/users/Aqluse/events{/privacy}","received_events_url":"https://api.github.com/users/Aqluse/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2018-08-15T20:18:41Z","updated_at":"2018-08-18T04:46:30Z","closed_at":null,"author_association":"NONE","body":"Sorry, don't familiar with tests yet, so just information about issue I keep getting.  Error message is always as it is in title.\r\n\r\n\r\n```\r\nval monstercatRetrofit by lazy {\r\n    Retrofit.Builder().baseUrl(\"https://connect.monstercat.com/\")\r\n            .addConverterFactory(GsonConverterFactory.create())\r\n            .build()\r\n}\r\n\r\nval monstercatAPI = monstercatRetrofit.create(MonstercatAPI::class.java)\r\n\r\ninterface MonstercatAPI {\r\n    @POST(\"signin\") // Goes well\r\n    fun signIn(@Body identity: Login): Call<Gson>\r\n\r\n    @GET(\"api/self\") // Goes well with cookie\r\n    fun self(@Header(\"cookie\") cookie: String): Call<AccountInfo> // Cookie is required for this call\r\n\r\n    @GET(\"api/catalog/browse\") // Goes well until converting to data class, but it's my problem\r\n    fun tracks(\r\n            @Query(\"search\") search: String? = null,\r\n            @Query(\"playlistId\") playlistId: String? = null,\r\n            @Query(\"albumId\") albumId: String? = null,\r\n            @Query(\"isrc\") isrc: String? = null,\r\n            @Query(\"types\") types: List<String> = emptyList(),\r\n            @Query(\"genre\") genre: List<String> = emptyList(),\r\n            @Query(\"tags\") tags: List<String> = emptyList()\r\n    ): Call<BrowseTracksResults>\r\n\r\n@GET(\"api/catalog/release\") // Goes with error, no any values passed, so parameters can be erased (tried)\r\n    fun releases(\r\n            @Query(\"search\") search: String? = null,\r\n            @Query(\"playlistId\") playlistId: String? = null,\r\n            @Query(\"albumId\") albumId: String? = null,\r\n            @Query(\"isrc\") isrc: String? = null,\r\n            @Query(\"types\") types: List<String> = emptyList(),\r\n            @Query(\"genre\") genre: List<String> = emptyList(),\r\n            @Query(\"tags\") tags: List<String> = emptyList()\r\n    ): Call<BrowseReleasesResults>\r\n}\r\n\r\n```\r\nObjects you might need:\r\n\r\n```\r\ndata class BrowseReleasesResults(\r\n        val sort: Sort,\r\n        val total: Int = 0,\r\n        val results: List<Release> = emptyList()\r\n)\r\n\r\ndata class ReleaseTracksResults(\r\n        val hiddenTracks: Int = 0,\r\n        val total: Int = 0,\r\n        val results: List<Track> = emptyList()\r\n)\r\n\r\ndata class Track(\r\n        @SerializedName(\"_id\") val id: String,\r\n        val title: String,\r\n        val artistsTitle: String,\r\n        val bpm: Double,  \r\n        val artists: List<ArtistEntity> = emptyList(),\r\n        val featuring: List<ArtistEntity> = emptyList(),\r\n        val remixers: List<ArtistEntity> = emptyList(),\r\n        val label: String,\r\n        val albums: List<AlbumEntry> = emptyList(),\r\n        val albumNames: List<String> = emptyList(),\r\n        val albumCatalogIds: List<String> = emptyList(),\r\n        val genres: List<String> = emptyList(),\r\n        val genre: String = \"\", // because nullable\r\n        /*val iswc: ?, //null*/\r\n        val isrc: String,\r\n        val duration: Double, \r\n        val licensable: Boolean,\r\n        val tags: List<String> = emptyList(), // Descriptive attributes\r\n        val created: Date,\r\n        val catalogs: List<String> = emptyList(),\r\n        val hasErrors: Boolean,\r\n        val tagusId: String,\r\n        /*val youTubeVideoId: List<?> = emptyList(),*/\r\n \r\n        /*val disabledFor: ?, //null*/\r\n        /*val releaseDate: ?, //null*/\r\n        val release: Release?,  \r\n        val deleted: Boolean?,\r\n        val artistDetails: ArtistDetails?,\r\n        val artistUsers: ArtistUsers?,\r\n        val debutDate: Date?,\r\n \r\n        val streamable: Boolean?,\r\n        val downloadable: Boolean?,\r\n        val inEarlyAccess: Boolean?,\r\n        val freeDownloadForUsers: Boolean?\r\n)\r\n\r\ndata class ArtistEntity(\r\n        @SerializedName(\"_id\") val id: String,\r\n        val name: String,\r\n        val artistId: String\r\n)\r\n\r\ndata class AlbumEntry(\r\n        @SerializedName(\"_id\") val id: String,\r\n        val trackNumber: Int,\r\n        val albumId: String,\r\n        val isFree: Boolean,\r\n        val streamHash: String\r\n)\r\n\r\ndata class Release(\r\n        @SerializedName(\"_id\") val id: String,\r\n        val title: String,\r\n        val renderedArtists: String = \"\",\r\n        val catalogId: String,\r\n        val type: String?, // Single, EP, etc.  //TODO: implement with enum\r\n        val upc: String?,\r\n        val grid: String?,\r\n        val releaseDate: Date,\r\n        val label: String?,\r\n        val tags: List<String> = emptyList(), // Descriptive attributes\r\n        val freeDownloadForUsers: Boolean, // Able to download separate tracks when log in account\r\n        val showToAdminsOnly: Boolean?,\r\n        val showOnWebsite: Boolean?,\r\n        val showAsFree: Boolean, // Able to download separate tracks when log in account\r\n        val urls: List<URLEntity> = emptyList(),\r\n        val tagusId: String?,\r\n        val coverUrl: URL?,\r\n\r\n         val streamable: Boolean?,\r\n        val downloadable: Boolean?,\r\n        val inEarlyAccess: Boolean?,\r\n\r\n        val thumbHashes: Map<String, String> = emptyMap(),\r\n        val imageHashSum: String?,\r\n\r\n         val coverArt: String?, // Not equal to coverUrl at all, not full URL\r\n\r\n         val deleted: Boolean?,\r\n\r\n         val preReleaseDate: Date?\r\n)\r\n\r\ndata class URLEntity(\r\n        @SerializedName(\"_id\") val id: String?, // Not exists in \"urls\" of ArtistDetails\r\n        val original: URL,\r\n        val short: URL?,\r\n        val platform: String\r\n)\r\n\r\ndata class ArtistDetails(\r\n        @SerializedName(\"_id\") val id: String,\r\n        val urls: List<URLEntity> = emptyList(),\r\n        val years: List<Int> = emptyList(), \r\n        val names: String,\r\n        val profileImageUrl: URL,\r\n        val vanityUri: String,\r\n        val public: Boolean,\r\n        val shopifyCollectionId: String // But always empty or null\r\n)\r\n\r\ndata class ArtistUsers(\r\n        @SerializedName(\"_id\") val id: String,\r\n        val name: String,\r\n        val websiteDetailsId: String\r\n)\r\n\r\ndata class Sort(\r\n        val releaseDate: Int //TODO: implement with enum\r\n```\r\n\r\nMy usage of this:\r\n```\r\nmonstercatAPI.releases().enqueue(object : Callback<BrowseReleasesResults> { \r\n                override fun onResponse(call: Call<BrowseReleasesResults>, response: Response<BrowseReleasesResults>) {\r\n                    if (response.isSuccessful)\r\n                        setItems(response.body()!!.results.map { it.toCollectionModel() })\r\n                    else\r\n                        Log.d(\"Retrofit failure\", \"${response.code()}\")\r\n                }\r\n\r\n                override fun onFailure(call: Call<BrowseReleasesResults>, t: Throwable) { // Falling into there with MalformedURLException\r\n                    TODO(\"not implemented\") //To change body of created functions use File | Settings | File Templates.\r\n                }\r\n            })\r\n```\r\n\r\nURL that supposed to be called (https://connect.monstercat.com/api/catalog/release/) is completely valid and works well in browser. \r\nI have completely no idea what could be wrong."},"comment":{"url":"https://api.github.com/repos/square/retrofit/issues/comments/414032100","html_url":"https://github.com/square/retrofit/issues/2856#issuecomment-414032100","issue_url":"https://api.github.com/repos/square/retrofit/issues/2856","id":414032100,"node_id":"MDEyOklzc3VlQ29tbWVudDQxNDAzMjEwMA==","user":{"login":"JakeWharton","id":66577,"node_id":"MDQ6VXNlcjY2NTc3","avatar_url":"https://avatars0.githubusercontent.com/u/66577?v=4","gravatar_id":"","url":"https://api.github.com/users/JakeWharton","html_url":"https://github.com/JakeWharton","followers_url":"https://api.github.com/users/JakeWharton/followers","following_url":"https://api.github.com/users/JakeWharton/following{/other_user}","gists_url":"https://api.github.com/users/JakeWharton/gists{/gist_id}","starred_url":"https://api.github.com/users/JakeWharton/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JakeWharton/subscriptions","organizations_url":"https://api.github.com/users/JakeWharton/orgs","repos_url":"https://api.github.com/users/JakeWharton/repos","events_url":"https://api.github.com/users/JakeWharton/events{/privacy}","received_events_url":"https://api.github.com/users/JakeWharton/received_events","type":"User","site_admin":false},"created_at":"2018-08-18T04:46:30Z","updated_at":"2018-08-18T04:46:30Z","author_association":"COLLABORATOR","body":"Please include the entire stacktrace."}}
{"actor":{"display_login":"JakeWharton"}}