logcat中没有get请求

问题描述 投票:0回答:0

我在我的应用程序中收到了请求,但我在 logcat 中看不到请求日志,但我已经有了 okhttp 和日志记录拦截器依赖项。

有我的要求:https://gnews.io/api/v4/top-headlines?apikey=8cd9955292e0849aa6d73b2c15cef758&category=general&lang=en&country=US&max=6

您可以在邮递员或您自己的浏览器上检查它是否工作正常。

我也想知道如何在get请求中集成apikey(它是必需的),但实现在下面。

data class NewsList(
    @SerializedName("articles")
val data:List<News>
)
  data class News(
      val title:String,
      @SerializedName("image")
      val image:String,
      @SerializedName("publishedAt")
      val time:LocalDateTime,
      @SerializedName("source")
      val author:Author
  )
     data class Author (
         @SerializedName("name")
         val name:String
             )

interface NewsService {
@Headers("application/json","charset=utf-8")
@GET("top-headlines?category=general&lang=en&country=US&max=6")
suspend fun getNews() :
        Response<NewsList>
}

    @Provides
    @Singleton
    fun provideRetrofitService():NewsService{
        val api_interceptor = Interceptor {
            val originalRequest = it.request()
            val newHttpUrl = originalRequest.url.newBuilder()
                .addQueryParameter("apikey",
                    "8cd9955292e0849aa6d73b2c15cef758")
                .build()
            val newRequest = originalRequest.newBuilder()
                .url(newHttpUrl)
                .build()
            it.proceed(newRequest)
        }

        val httpLoggingInterceptor = HttpLoggingInterceptor()
            httpLoggingInterceptor.level = HttpLoggingInterceptor.Level.BODY

      val OkHttpClient = OkHttpClient().newBuilder()
          .addNetworkInterceptor(api_interceptor)
          .addInterceptor(ErrorIntercept())
          .addInterceptor(httpLoggingInterceptor)
          .build()


        return Retrofit.Builder()
            .baseUrl("https://gnews.io/api/v4/")
            .client(OkHttpClient)
            .addConverterFactory(GsonConverterFactory.create())
            .build()
            .create(NewsService::class.java)
    }
    class ErrorIntercept:Interceptor{
        override fun intercept(chain: Interceptor.Chain): Response {
            val req : Request = chain.request()
            val resp = chain.proceed(req)
            when(resp.code){
                200->{
                    Log.e("200 code","Request success")
                }
                404,402,401->{
                    Log.e("404,402,401 code", "response was failed")
                }
            }
            return resp
            }
    }
}

class NewsRepositoryImpl @Inject constructor(private val api:NewsService) : NewsRepository {
    override suspend fun getNews(): Resource<Response<NewsList>> {
        return try {
            Resource.Companion.Success(
                data = api.getNews()
            )
        }catch (e:Exception){
            Resource.Companion.Error("Error")
        }
    }


}


data class DataEvent(
    val data: Response<NewsList>? = null,
    val error:String? = null,
    val isLoading:Boolean = false
)

sealed class Resource<T>(val data: T? = null, val message: String? = null) {
        companion object{
                class Success<T>(data: T?): Resource<T>(data)
                class Error<T>(message: String, data: T? = null): Resource<T>(data, message)
        }
}



@HiltViewModel
class MainViewmodel@Inject constructor(private val repository:NewsRepository)
    :ViewModel() {
 var newsstatemain by mutableStateOf(DataEvent())
   private set


    fun loadnews(){
        viewModelScope.launch {
            newsstatemain = newsstatemain.copy(
                isLoading = true,
                error = null
            )
            when(val result = repository.getNews()){
                is Resource.Companion.Success<*> ->{
                    newsstatemain.copy(
                        data = result.data,
                        isLoading = false,
                        error = null
                    )
                }
                is Resource.Companion.Error<*>->{
                    newsstatemain = newsstatemain.copy(
                        data = null,
                        isLoading = false,
                        error = result.message
                    )
                }
            }
            }
        }
    }
android rest retrofit2 okhttp interceptor
© www.soinside.com 2019 - 2024. All rights reserved.