首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android AsyncHttpClient 請求無回應:需使用 IP 位址而非域名

     編輯:程式設計綜合問答

現象

使用 AsyncHttpClient 請求 https://www.baidu.com,onSuccess 回調從未觸發。

可能原因與排查

  1. 網路權限:AndroidManifest.xml 需 <uses-permission android:name="android.permission.INTERNET"/>
  2. 明文流量限制:Android 9+ (API 28) 預設禁止 HTTP 明文,需在 res/xml/network_security_config.xml 允許或改用 HTTPS
  3. DNS 解析失敗:模擬器/裝置無法解析域名,嘗試用 IP 位址測試(如 https://220.181.38.148)
  4. 程式庫版本過舊:loopj/android-async-http 多年未維護,建議遷移至 OkHttp/Retrofit

快速驗證

// 測試用 IP 直接請求
client.get("https://220.181.38.148", new AsyncHttpResponseHandler() {
    @Override public void onSuccess(int status, Header[] headers, byte[] body) {
        Log.d("response", new String(body));
    }
    @Override public void onFailure(int status, Header[] headers, byte[] body, Throwable error) {
        Log.e("error", error.toString());
    }
});

現代替代:OkHttp

OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url("https://www.baidu.com").build();
client.newCall(request).enqueue(new Callback() {
    @Override public void onResponse(Call call, Response response) throws IOException {
        Log.d("okhttp", response.body().string());
    }
    @Override public void onFailure(Call call, IOException e) {
        Log.e("okhttp", e.toString());
    }
});
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved