在安卓应用中访问网络前,需在 AndroidManifest.xml
中声明权限:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
注意:Android 6.0+ 系统需动态申请敏感权限(如定位权限可能间接影响网络状态判断)。
HttpURLConnection
URL url = new URL("https://api.example.com/data"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); int responseCode = connection.getResponseCode(); if (responseCode == 200) { // 读取输入流 }
缺点:代码冗长,需手动处理线程和异常。
库名 | 特点 | 适用场景 |
---|---|---|
OkHttp | 轻量、支持 HTTP/2、自动管理连接池 | 通用网络请求 |
Retrofit | 基于 OkHttp,支持注解和 JSON 解析 | RESTful API 交互 |
Volley | 适合短时间、小数据量请求,内置缓存 | 图片加载、轻量级 API |
OkHttp 示例:
OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder().url("https://api.example.com/data").build(); client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { / 处理失败 / } @Override public void onResponse(Call call, Response response) throws IOException { // 处理响应 } });
协议 | 特点 |
---|---|
TCP | 可靠传输,顺序保证,适用于文件传输、实时通信(如聊天) |
UDP | 低延迟,不保证顺序/可靠性,适用于视频流、游戏等 |
Socket socket = new Socket("server_ip", port); PrintWriter out = new PrintWriter(socket.getOutputStream(), true); out.println("Hello Server"); BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); String response = in.readLine();
注意:需在子线程执行,避免阻塞主线程。
adb shell
或 Android Studio 的 Logcat 查看设备日志。 adb devices # 查看连接设备 adb push local_file /remote/path # 传输文件到手机
adb connect <IP>:<PORT>
将手机服务暴露到电脑。 场景 | 技术方案 | 关键点 |
---|---|---|
从服务器获取 JSON 数据 | Retrofit + Gson/Moshi | 定义接口,自动解析 JSON |
实时聊天应用 | WebSocket(OkHttp 支持) | 保持长连接,处理心跳包 |
文件上传/下载 | MultipartRequest(OkHttp) | 分片上传,支持断点续传 |
网络请求失败:
AndroidManifest.xml
是否声明权限。 NetworkInfo
检测网络状态: ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo info = cm.getActiveNetworkInfo(); if (info == null || !info.isAvailable()) { / 提示无网络 / }
主线程网络操作导致 ANR:
AsyncTask
)或线程池处理网络请求。 A:可通过以下方式:
A:推荐方案:
adb push/pull
命令传输文件。