Android跳转异常:点击FindDoctorActivity卡片无法进入DoctorDetailsActivity
问题描述
使用Android Studio Flamingo版本,基于API 33开发医疗应用时,点击FindDoctorActivity中的CardView组件,预期跳转至DoctorDetailsActivity,但实际出现返回原页面、白屏或应用崩溃的情况。
相关代码
FindDoctorActivity 代码
package com.example.healthcare; import androidx.appcompat.app.AppCompatActivity; import androidx.cardview.widget.CardView; import android.content.Intent; import android.os.Bundle; import android.view.View; public class FindDoctorActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_find_doctor); CardView exit = findViewById(R.id.cardFDBack); exit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(FindDoctorActivity.this,HomeActivity.class)); } }); CardView familyphysician = findViewById(R.id.cardFDFamilyPhysician); familyphysician.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent it = new Intent(FindDoctorActivity.this,DoctorDetailsActivity.class); it.putExtra("title", "Family Physicians"); startActivity(it); } }); CardView dietician = findViewById(R.id.cardFDDietician); dietician.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent it = new Intent(FindDoctorActivity.this,DoctorDetailsActivity.class); it.putExtra("title", "Dietician"); startActivity(it); } }); CardView surgeon = findViewById(R.id.cardFDSurgeon); familyphysician.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent it = new Intent(FindDoctorActivity.this,DoctorDetailsActivity.class); it.putExtra("title", "Surgeon"); startActivity(it); } }); CardView cardiologist = findViewById(R.id.cardFDCardiologist); cardiologist.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent it = new Intent(FindDoctorActivity.this,DoctorDetailsActivity.class); it.putExtra("title", "Cardiologist"); startActivity(it); } }); CardView dentist = findViewById(R.id.cardFDDentist); dentist.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent it = new Intent(FindDoctorActivity.this,DoctorDetailsActivity.class); it.putExtra("title", "Denstist"); startActivity(it); } }); } }
DoctorDetailsActivity 代码
package com.example.healthcare; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.TextView; import java.util.ArrayList; import java.util.HashMap; public class DoctorDetailsActivity extends AppCompatActivity { private String[][] doctor_details1 = { {"Doctor Name : Ajit Saste", "Hospital Address : pimpri","Mobile No. : 1234567890","500"}, {"Doctor Name : Prasad Pawar", "Hospital Address : Nigdi","Mobile No. : 1234567809","600"}, {"Doctor Name : Swapnil Kale", "Hospital Address : Pune","Mobile No. : 1234567089","700"}, {"Doctor Name : Deepak Deshmukh", "Hospital Address : Chinchwad","Mobile No. : 1234560789","800"}, {"Doctor Name : Ashok Panda", "Hospital Address : Katraj","Mobile No. : 1234567890","900"} }; private String[][] doctor_details2 = { {"Doctor Name : Ankur Kar", "Hospital Address : pimpri","Mobile No. : 1234567890","500"}, {"Doctor Name : Anusha Gokhale", "Hospital Address : Nigdi","Mobile No. : 1234567809","600"}, {"Doctor Name : Dipa Rout", "Hospital Address : Pune","Mobile No. : 1234567089","700"}, {"Doctor Name : Aalok Krish", "Hospital Address : Chinchwad","Mobile No. : 1234560789","800"}, {"Doctor Name : Abhiram Kothari", "Hospital Address : Katraj","Mobile No. : 1234567890","900"} }; private String[][] doctor_details3 = { {"Doctor Name : Madhur Bhargav", "Hospital Address : pimpri","Mobile No. : 1234567890","500"}, {"Doctor Name : Advaith Kapur", "Hospital Address : Nigdi","Mobile No. : 1234567809","600"}, {"Doctor Name : Shaurya Nzareth", "Hospital Address : Pune","Mobile No. : 1234567089","700"}, {"Doctor Name : Sudarshan Gopal", "Hospital Address : Chinchwad","Mobile No. : 1234560789","800"}, {"Doctor Name : Aruna Upadhyay", "Hospital Address : Katraj","Mobile No. : 1234567890","900"} }; private String[][] doctor_details4 = { {"Doctor Name : Rajesh Kade", "Hospital Address : pimpri","Mobile No. : 1234567890","500"}, {"Doctor Name : Varsha Chaudhari", "Hospital Address : Nigdi","Mobile No. : 1234567809","600"}, {"Doctor Name : Anah Dalal", "Hospital Address : Pune","Mobile No. : 1234567089","700"}, {"Doctor Name : Gauri Lad", "Hospital Address : Chinchwad","Mobile No. : 1234560789","800"}, {"Doctor Name : Nima Jayram", "Hospital Address : Katraj","Mobile No. : 1234567890","900"} }; private String[][] doctor_details5 = { {"Doctor Name : Manas Mannan", "Hospital Address : pimpri","Mobile No. : 1234567890","500"}, {"Doctor Name : Kavika Ramesh", "Hospital Address : Nigdi","Mobile No. : 1234567809","600"}, {"Doctor Name : Minali Saraff", "Hospital Address : Pune","Mobile No. : 1234567089","700"}, {"Doctor Name : Rashmi Chander", "Hospital Address : Chinchwad","Mobile No. : 1234560789","800"}, {"Doctor Name : Neel Salvi", "Hospital Address : Katraj","Mobile No. : 1234567890","900"} }; TextView tv; Button btn; String[][] doctor_details = {}; HashMap<String, String> item; ArrayList list; SimpleAdapter sa; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_doctor_details); tv = findViewById(R.id.textViewDDTitle); btn = findViewById(R.id.buttonDDBack); Intent it = getIntent(); String title = it.getStringExtra("title"); tv.setText(title); if(title.compareTo("Family Physicians")==0) doctor_details = doctor_details1; else if(title.compareTo("Dietician")==0) doctor_details = doctor_details2; else if(title.compareTo("Surgeon")==0) doctor_details = doctor_details3; else if(title.compareTo("Dentist")==0) doctor_details = doctor_details4; else doctor_details = doctor_details5; btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { startActivity(new Intent(DoctorDetailsActivity.this,FindDoctorActivity.class)); } }); list = new ArrayList(); for(int i=0;i<doctor_details.length;i++){ item = new HashMap<String,String>(); item.put("line1", doctor_details[i][0]); item.put("line2", doctor_details[i][1]); item.put("line3", doctor_details[i][2]); item.put("line4", doctor_details[i][3]); item.put("line5","Cons Fees :"+doctor_details[i][4]+"/- "); list.add( item ); } sa = new SimpleAdapter(this,list, R.layout.multi_lines, new String[]{"line1","line2","line3","line4","line5"}, new int []{R.id.line_a,R.id.line_b,R.id.line_c,R.id.line_d,R.id.line_e}); ListView lst = findViewById(R.id.listViewDD); lst.setAdapter(sa); } }
问题分析与修复方案
1. Surgeon CardView点击事件绑定错误
在FindDoctorActivity中,定义CardView surgeon后,错误地给familyphysician重复设置点击监听,导致:
- 点击Family Physician的CardView会跳转到Surgeon页面(原有逻辑被覆盖)
- 点击Surgeon的CardView无响应
修复:将Surgeon的点击监听绑定到surgeon对象:
CardView surgeon = findViewById(R.id.cardFDSurgeon); surgeon.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent it = new Intent(FindDoctorActivity.this,DoctorDetailsActivity.class); it.putExtra("title", "Surgeon"); startActivity(it); } });
2. Dentist的Extra参数拼写错误
传递的title为"Denstist",但DoctorDetailsActivity中判断的是"Dentist",导致无法匹配到对应医生数据,默认使用Cardiologist的数据集。
修复:修正拼写错误:
CardView dentist = findViewById(R.id.cardFDDentist); dentist.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent it = new Intent(FindDoctorActivity.this,DoctorDetailsActivity.class); it.putExtra("title", "Dentist"); startActivity(it); } });
3. 数组越界异常(崩溃核心原因)
每个doctor_details子数组仅包含4个元素(索引0-3),但代码中尝试访问doctor_details[i][4],触发ArrayIndexOutOfBoundsException,直接导致应用崩溃。
修复:将费用字段的索引改为3(对应子数组的第4个元素):
item.put("line5","Cons Fees :"+doctor_details[i][3]+"/- ");
可选优化:页面跳转后清理栈(避免重复页面)
例如在退出FindDoctorActivity时,调用finish()关闭当前页面:
exit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(FindDoctorActivity.this,HomeActivity.class)); finish(); } });
内容的提问来源于stack exchange,提问作者Jay Chaudhari
相关产品推荐
相关产品推荐

