You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android使用Retrofit请求接口时Callback始终触发onFailure无响应如何解决

问题原因及解决方案

1. 优先检查Android明文流量限制

Android 9(API Level 28)及以上系统默认禁止HTTP明文网络请求,你当前使用的BASE_URL是http://huseyinozkoc.com/,属于HTTP协议,会被系统拦截导致请求失败。

解决方案:

  • 方案1:将服务端升级为HTTPS协议,修改BASE_URL为HTTPS开头的地址,推荐使用该方案。
  • 方案2:临时兼容HTTP请求,在res/xml目录下新建network_security_config.xml文件,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">huseyinozkoc.com</domain>
    </domain-config>
</network-security-config>

然后在AndroidManifest.xml的<application>标签中添加属性:

android:networkSecurityConfig="@xml/network_security_config"

2. 增加错误日志定位具体问题

你当前onFailure回调中仅弹出Toast,没有打印错误栈信息,无法定位具体报错原因,修改onFailure代码:

@Override
public void onFailure(Call<PlaceCevap> call, Throwable t) {
    // 打印错误日志,Logcat中过滤TAG即可查看具体错误
    Log.e("RetrofitError", "请求失败", t);
    Toast.makeText(MainActivity.this, "fail" , Toast.LENGTH_SHORT).show();
}

常见错误类型可以通过日志快速判断:

  • 连接超时:检查服务端是否正常运行、端口是否对外开放、设备和服务端网络是否连通
  • Gson解析错误:检查PlaceCevap实体类结构是否和接口返回的JSON结构完全匹配,字段名、字段类型是否一致,是否遗漏必要的@SerializedName注解

3. 增加网络请求日志查看请求详情

引入OkHttp的日志拦截器,查看请求的完整地址、参数、响应头等信息,确认请求拼接是否正确:

步骤1:添加依赖(模块级build.gradle)

implementation 'com.squareup.okhttp3:logging-interceptor:4.10.0'

步骤2:修改RetrofitClient类,添加OkHttp配置

import okhttp3.OkHttpClient;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

public class RetrofitClient {
    private static Retrofit retrofit = null;
    public static Retrofit getClient(String baseUrl) {
        if (retrofit==null) {
            // 配置日志拦截器
            HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
            loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
            OkHttpClient client = new OkHttpClient.Builder()
                    .addInterceptor(loggingInterceptor)
                    .build();
            
            retrofit = new Retrofit.Builder()
                    .baseUrl(baseUrl)
                    .client(client)
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
        }
        return retrofit;
    }
}

配置后可以在Logcat中过滤OkHttp标签查看完整的请求和响应内容,确认拼接后的请求地址是否为http://huseyinozkoc.com/turkey/get_All_details.php,直接访问该地址确认返回内容是否符合预期。

4. 确认网络权限配置

再次检查AndroidManifest.xml中是否已正确添加网络权限,权限需要放在<application>标签外:

<uses-permission android:name="android.permission.INTERNET" />

内容的提问来源于stack exchange,提问作者Hüseyin Özkoç

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 05:57:03