如何在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
相关产品推荐
相关产品推荐

