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

Android中如何通过PHP+MySQL获取并展示Web系统注册数据?

嘿,刚接触Android和Java不用慌,我一步步帮你搞定从PHP/MySQL获取数据的事儿!

第一步:先优化你的PHP代码

你现在的PHP返回的是一个扁平数组,把所有Email和Senha混在一起,Android端解析时根本分不清哪个邮箱对应哪个密码。咱们改成返回结构化的JSON数组,每个元素是包含用户邮箱和密码的对象,这样解析起来清晰多了:

<?php
$conexao = mysqli_connect('localhost','root','success','projeto');
// 先检查数据库连接是否成功,避免出错
if (!$conexao) {
    die(json_encode(array("error" => "数据库连接失败: " . mysqli_connect_error())));
}

// 只查询需要的字段,不要用SELECT *
$sql = mysqli_query($conexao,"SELECT Email, Senha FROM pe_mobile");
$mostrar = array();
while($jm = mysqli_fetch_assoc($sql)){
    // 把每个用户的信息封装成独立对象存入数组
    $mostrar[] = array(
        "email" => $jm["Email"],
        "senha" => $jm["Senha"]
    );
}

// 设置响应头为JSON格式,让Android明确知道返回的是JSON数据
header('Content-Type: application/json; charset=utf-8');
echo json_encode($mostrar);
// 记得关闭数据库连接
mysqli_close($conexao);
?>

第二步:Android端调用接口并解析数据

首先要注意:Android不允许在主线程发起网络请求,所以咱们用AsyncTask(对新手友好)来处理后台网络请求,然后解析返回的JSON数据。

1. 先修正你现有Conexao类的小错误

你代码里的Content-Lenght拼写错了,应该是Content-Length,虽然暂时可能不影响,但修正后更稳妥:

connection.setRequestProperty("Content-Length","" + Integer.toString(parametrosUsuarios.getBytes().length));

2. 创建AsyncTask处理网络请求和解析

import android.os.AsyncTask;
import android.util.Log;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.HashMap;

public class FetchDataTask extends AsyncTask<Void, Void, String> {

    // 定义回调接口,用来把解析好的数据传给UI线程
    public interface OnDataFetchedListener {
        void onDataFetched(ArrayList<HashMap<String, String>> userList);
        void onFetchError(String errorMessage);
    }

    private OnDataFetchedListener listener;
    private String phpUrl; // 你的PHP文件的网络地址

    public FetchDataTask(String phpUrl, OnDataFetchedListener listener) {
        this.phpUrl = phpUrl;
        this.listener = listener;
    }

    @Override
    protected String doInBackground(Void... voids) {
        // 调用你已有的Conexao类发起请求,这里不需要传参数,所以传空字符串
        return Conexao.postDados(phpUrl, "");
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
        if (result == null) {
            listener.onFetchError("网络请求失败,请检查连接或PHP地址");
            return;
        }

        ArrayList<HashMap<String, String>> userList = new ArrayList<>();
        try {
            // 把返回的字符串解析成JSON数组
            JSONArray jsonArray = new JSONArray(result);
            for (int i = 0; i < jsonArray.length(); i++) {
                JSONObject userObj = jsonArray.getJSONObject(i);
                HashMap<String, String> userMap = new HashMap<>();
                userMap.put("email", userObj.getString("email"));
                userMap.put("senha", userObj.getString("senha"));
                userList.add(userMap);
            }
            // 把解析好的数据回调给UI线程
            listener.onDataFetched(userList);
        } catch (JSONException e) {
            e.printStackTrace();
            listener.onFetchError("数据解析失败: " + e.getMessage());
        }
    }
}

3. 在Activity里调用这个任务

// 比如在Activity的onCreate方法或者按钮点击事件中
String phpUrl = "http://192.168.1.100/你的PHP文件名.php"; 
// 注意!这里要用你电脑的本地IP(比如192.168.x.x),不要用localhost,因为模拟器的localhost指向自己
// 确保你的Android设备和电脑在同一个局域网里

new FetchDataTask(phpUrl, new FetchDataTask.OnDataFetchedListener() {
    @Override
    public void onDataFetched(ArrayList<HashMap<String, String>> userList) {
        // 这里拿到了所有用户的数据,可以用来显示到UI上
        for (HashMap<String, String> user : userList) {
            String email = user.get("email");
            String senha = user.get("senha");
            Log.d("用户数据", "邮箱: " + email + ", 密码: " + senha);
            // 比如把数据显示到TextView或者ListView里
        }
    }

    @Override
    public void onFetchError(String errorMessage) {
        // 处理错误情况,比如弹出提示
        Log.e("获取数据失败", errorMessage);
        // Toast.makeText(getApplicationContext(), errorMessage, Toast.LENGTH_SHORT).show();
    }
}).execute();

最后要注意的几个点

  1. 添加网络权限:在AndroidManifest.xml里加上这句,不然App连不上网:
<uses-permission android:name="android.permission.INTERNET" />
  1. 本地测试环境:确保你的PHP文件放在本地服务器(比如XAMPP),并且Android设备和电脑在同一个WiFi网络下。
  2. AsyncTask的替代方案:虽然AsyncTask现在被标记为废弃,但对新手来说是最容易理解的。等你熟悉后,可以学习用Coroutines或者Retrofit这些更现代的网络请求框架。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:29:36