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

如何将PHP变量值传入Android Studio的EditText组件?

实现PHP变量传递到Android EditText + 关联表数据插入方案

嗨,我来帮你梳理下怎么搞定这个需求!结合你的双表单+关联表场景,咱们分步骤来实现:

第一步:PHP端编写接口,返回第一个表的主键

当你提交第一个表单到PHP时,插入第一个表后得拿到自动生成的主键(MySQL用617162就行),然后把主键和需要显示的变量以JSON格式返回给Android。

示例PHP代码:

<?php
// 数据库连接(用PDO更安全)
$dsn = 'mysql:host=你的主机地址;dbname=你的数据库名;charset=utf8';
$username = '数据库用户名';
$password = '数据库密码';
try {
    $pdo = new PDO($dsn, $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // 插入第一个表的数据
    $stmt = $pdo->prepare("INSERT INTO first_table (字段1, 字段2) VALUES (:val1, :val2)");
    $stmt->bindParam(':val1', $_POST['val1']);
    $stmt->bindParam(':val2', $_POST['val2']);
    $stmt->execute();

    // 获取插入后的主键
    $firstTableId = $pdo->lastInsertId();

    // 准备返回给Android的数据包
    $response = [
        'success' => true,
        'first_table_id' => $firstTableId,
        'message' => '第一个表单提交成功',
        'display_content' => $_POST['val1'] // 示例:把用户输入的val1返回给Android显示
    ];

    echo json_encode($response);
} catch(PDOException $e) {
    echo json_encode([
        'success' => false,
        'message' => '出错啦:' . $e->getMessage()
    ]);
}
?>

第二步:Android端请求接口,存主键+设置EditText

在Android里用Retrofit(或者HttpURLConnection)请求PHP接口,拿到返回的JSON后,把主键存到本地(比如SharedPreferences)方便第二个表单用,同时把需要显示的变量塞进EditText。

示例Retrofit代码:

  1. 先定义API接口:
interface ApiService {
    @FormUrlEncoded
    @POST("first_form_submit.php")
    suspend fun submitFirstForm(
        @Field("val1") val1: String,
        @Field("val2") val2: String
    ): Response<FirstFormResponse>
}

// 对应PHP返回的JSON数据类
data class FirstFormResponse(
    val success: Boolean,
    val first_table_id: Int,
    val message: String,
    val display_content: String
)
  1. 在第一个表单Activity里处理请求:
// 初始化Retrofit
val retrofit = Retrofit.Builder()
    .baseUrl("http://你的服务器IP/") // 替换成你的PHP服务地址
    .addConverterFactory(GsonConverterFactory.create())
    .build()
val apiService = retrofit.create(ApiService::class.java)

// 提交第一个表单的点击事件
submitFirstBtn.setOnClickListener {
    val val1 = firstEt1.text.toString().trim()
    val val2 = firstEt2.text.toString().trim()
    lifecycleScope.launch {
        try {
            val response = apiService.submitFirstForm(val1, val2)
            if (response.isSuccessful) {
                response.body()?.let { res ->
                    if (res.success) {
                        // 把主键存到SharedPreferences
                        val sp = getSharedPreferences("AppData", MODE_PRIVATE)
                        sp.edit().putInt("first_table_id", res.first_table_id).apply()
                        // 跳转到第二个表单,并传递要显示的内容
                        val intent = Intent(this@FirstFormActivity, SecondFormActivity::class.java)
                        intent.putExtra("show_content", res.display_content)
                        startActivity(intent)
                    } else {
                        Toast.makeText(this@FirstFormActivity, res.message, Toast.LENGTH_SHORT).show()
                    }
                }
            } else {
                Toast.makeText(this@FirstFormActivity, "请求失败", Toast.LENGTH_SHORT).show()
            }
        } catch (e: Exception) {
            Toast.makeText(this@FirstFormActivity, "网络出错:${e.message}", Toast.LENGTH_SHORT).show()
        }
    }
}

第三步:第二个表单接收数据,提交时传外键

在第二个表单Activity里,拿到传递过来的显示内容设置到EditText,再取出之前存的主键,提交时作为外键传给PHP插入第二个表。

示例代码:

class SecondFormActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_second_form)

        // 把PHP返回的变量设置到EditText
        val showContent = intent.getStringExtra("show_content")
        secondEt.setText(showContent)

        // 取出第一个表的主键
        val sp = getSharedPreferences("AppData", MODE_PRIVATE)
        val firstTableId = sp.getInt("first_table_id", -1)

        // 提交第二个表单的点击事件
        submitSecondBtn.setOnClickListener {
            val val3 = secondEt2.text.toString().trim()
            if (firstTableId == -1) {
                Toast.makeText(this, "请先提交第一个表单", Toast.LENGTH_SHORT).show()
                return@setOnClickListener
            }
            lifecycleScope.launch {
                try {
                    // 调用第二个表单的PHP接口,传递外键
                    val response = apiService.submitSecondForm(firstTableId, val3)
                    if (response.isSuccessful) {
                        response.body()?.let { res ->
                            if (res.success) {
                                Toast.makeText(this@SecondFormActivity, "提交成功!", Toast.LENGTH_SHORT).show()
                            } else {
                                Toast.makeText(this@SecondFormActivity, res.message, Toast.LENGTH_SHORT).show()
                            }
                        }
                    }
                } catch (e: Exception) {
                    Toast.makeText(this@SecondFormActivity, "网络出错:${e.message}", Toast.LENGTH_SHORT).show()
                }
            }
        }
    }
}

对应的第二个表单PHP接口:

<?php
// 数据库连接同上
$dsn = 'mysql:host=你的主机地址;dbname=你的数据库名;charset=utf8';
$username = '数据库用户名';
$password = '数据库密码';
try {
    $pdo = new PDO($dsn, $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // 插入第二个表,外键关联第一个表的主键
    $stmt = $pdo->prepare("INSERT INTO second_table (first_table_id, 字段3) VALUES (:first_id, :val3)");
    $stmt->bindParam(':first_id', $_POST['first_table_id']);
    $stmt->bindParam(':val3', $_POST['val3']);
    $stmt->execute();

    echo json_encode([
        'success' => true,
        'message' => '第二个表单提交成功'
    ]);
} catch(PDOException $e) {
    echo json_encode([
        'success' => false,
        'message' => '出错啦:' . $e->getMessage()
    ]);
}
?>

小提醒

  • 确保Android设备和PHP服务器在同一网络(或者服务器有公网IP),不然会请求失败。
  • 如果不需要用户看到主键,不用把它放到EditText,直接存在本地内存或者SharedPreferences里就行。
  • 记得做空值校验,比如用户没填内容就提交的情况。

内容的提问来源于stack exchange,提问作者M. Loira

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:25:46