如何将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代码:
- 先定义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 )
- 在第一个表单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
相关产品推荐
相关产品推荐

