Android Spinner仅显示单条学生课程问题及代码求助
解决Spinner仅显示单条课程的问题
嘿,问题出在你的PHP后端代码里!你现在的查询逻辑只返回了数据库里的第一条课程记录,所以Spinner自然只能显示一个选项。咱们一步步来修复:
1. 修复PHP的查询方法
你用了fetch_assoc(),这个方法每次只会取出查询结果的一行数据。要获取该学生的所有课程,得循环把所有结果都捞出来:
public function getCourse($studID){ $stmt = $this->con->prepare("SELECT * FROM courses WHERE studID = ?"); $stmt->bind_param("s", $studID); $stmt->execute(); $result = $stmt->get_result(); $courses = array(); // 循环遍历所有查询结果,存入数组 while ($row = $result->fetch_assoc()) { $courses[] = $row; } return $courses; }
2. 修复PHP请求处理逻辑
原来的代码只把单条数据塞进了response数组,现在要遍历所有返回的课程,把每一门都加进去:
<?php if($_SERVER['REQUEST_METHOD']=='GET'){ $sid = $_GET['studID']; require_once ('dboperations.php'); $db = new dboperations(); $courses = $db->getCourse($sid); // 现在返回的是完整的课程数组 $response = array(); // 遍历每一门课程,构造响应数据 foreach ($courses as $course) { array_push($response,array( 'coCode'=>$course['CourseCode'], 'coName'=>$course['CourseName'], 'coGroup'=>$course['CourseGroup'], 'stID'=> $course['studID'] )); } echo json_encode(array("result"=>$response)); mysqli_close($db->con); // 注意这里要关闭数据库连接对象,原代码的mysqli_close($db)是错误的 } ?>
3. Android端代码确认
你的Android代码其实是没问题的:getStudents方法里循环遍历了JSONArray的每一项,把课程代码加入students列表,再设置给Spinner。只要后端返回了多条课程数据,这里就能正确加载所有选项。
现在测试一下,后端会返回该学生的所有课程,Spinner就能显示全部选项啦!
内容的提问来源于stack exchange,提问作者Muhamad Arif Abd Rahim
相关产品推荐
相关产品推荐

