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

如何在Android Fragment中通过AsyncHttpClient连接WAMP本地API?

如何在Android Fragment中用AsyncHttpClient连接WAMP本地API

首先,咱们得先把AsyncHttpClient的依赖加上,不然项目里找不到这个库。在你的app模块的build.gradle(Module级别)里的dependencies块中添加这行:

implementation 'com.loopj.android:android-async-http:1.4.10'

记得同步一下Gradle,确保依赖下载完成。

然后,别忘了给App加上网络权限,在AndroidManifest.xml里添加:

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

接下来是修改你的UsuarioFragment代码,这里要注意Android模拟器不能直接用localhost访问电脑的WAMP服务,得用10.0.2.2(对应模拟器宿主机的localhost),或者如果是真机测试的话,用你电脑的局域网IP(比如192.168.x.x)。

下面是完整的修改后的代码,我会加上注释说明每一步:

public class UsuarioFragment extends Fragment {
    JSONObject usuario;
    View v;
    String nombreUsuario;
    String emailUsuario;
    String tipoUsuario;

    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        v = inflater.inflate(R.layout.activity_usuario_fragment, container, false);
        
        // 初始化AsyncHttpClient实例
        AsyncHttpClient client = new AsyncHttpClient();
        // 替换成你的WAMP本地API接口地址,比如获取用户信息的接口
        String apiUrl = "http://10.0.2.2/your-api-endpoint.php"; // 模拟器用10.0.2.2,真机替换为电脑局域网IP

        // 发起GET请求(如果是POST请求,换成client.post方法即可)
        client.get(apiUrl, new AsyncHttpResponseHandler() {
            @Override
            public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
                // 请求成功后的处理逻辑
                try {
                    // 将返回的字节数组转为字符串,再解析成JSONObject
                    String responseStr = new String(responseBody, "UTF-8");
                    usuario = new JSONObject(responseStr);
                    
                    // 从JSON中提取所需字段
                    nombreUsuario = usuario.getString("nombre");
                    emailUsuario = usuario.getString("email");
                    tipoUsuario = usuario.getString("tipo");
                    
                    // 这里可以直接更新UI,AsyncHttpClient的回调已经运行在主线程
                    TextView tvNombre = v.findViewById(R.id.tv_nombre);
                    tvNombre.setText(nombreUsuario);
                    // 其他UI控件的更新逻辑同理
                    
                } catch (UnsupportedEncodingException | JSONException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
                // 请求失败时的处理,比如给用户提示
                Toast.makeText(getContext(), "连接API失败:" + error.getMessage(), Toast.LENGTH_SHORT).show();
                error.printStackTrace();
            }
        });
        
        return v;
    }
}

几个额外的注意点:

  • 如果你的API需要POST传参,可以用RequestParams来封装参数:
    RequestParams params = new RequestParams();
    params.put("user_id", "1001");
    client.post(apiUrl, params, new AsyncHttpResponseHandler() {
        // 回调逻辑和上面一致
    });
    
  • 真机测试时,要确保手机和电脑在同一个局域网,同时WAMP的Apache服务允许外部访问(可以在httpd.conf里把监听地址改成0.0.0.0,或者配置虚拟主机允许局域网IP访问)。
  • 解析JSON时一定要做好异常捕获,避免因为返回格式不符合预期导致App崩溃。

内容的提问来源于stack exchange,提问作者Teddy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:58:44