Android应用点击跳转CompoundTicket页面时崩溃问题求助
问题:点击跳转CompoundTicket页面时应用崩溃
开发停车应用的违章罚单子系统,为车辆类型添加下拉菜单后,应用启动正常,但点击跳转至CompoundTicket页面的按钮时崩溃。
XML布局代码(activity_compound_ticket.xml)
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <EditText android:id="@+id/etUserName" android:layout_width="310dp" android:layout_height="50sp" android:background="@drawable/input_field" android:ems="10" android:fontFamily="@font/regular" android:hint="Vehicle No" android:inputType="textPersonName" android:textColorHint="@color/gray" app:layout_constraintBottom_toTopOf="@+id/autoComplete" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.485" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.915" /> <AutoCompleteTextView android:id="@+id/autoComplete" android:layout_width="310dp" android:layout_height="50sp" android:layout_marginBottom="24dp" android:background="@drawable/input_field" android:ems="10" android:fontFamily="@font/regular" android:hint="Type of Vehicle" android:inputType="none" android:textColorHint="@color/gray" android:textSize="18sp" app:layout_constraintBottom_toTopOf="@+id/placeoffence" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.495" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.979" /> <EditText android:id="@+id/placeoffence" android:layout_width="310dp" android:layout_height="50sp" android:background="@drawable/input_field" android:ems="10" android:fontFamily="@font/regular" android:hint="Place of Offence" android:inputType="textPersonName" android:textColorHint="@color/gray" app:layout_constraintBottom_toTopOf="@+id/regBtn" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.485" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.755" /> <Button android:id="@+id/regBtn" android:layout_width="310dp" android:layout_height="50sp" android:background="@drawable/button" android:fontFamily="@font/bold" android:text="Submit" android:textAllCaps="false" android:textColor="#FFFFFF" android:textSize="18sp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.514" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.891" /> <ImageView android:id="@+id/imageView19" android:layout_width="170dp" android:layout_height="185dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="1.0" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.0" app:srcCompat="@drawable/ui1" /> <TextView android:id="@+id/tv4" android:layout_width="142dp" android:layout_height="55dp" android:fontFamily="@font/bold" android:text="Enter \nTraffic Ticket" android:textColor="@color/black" android:textSize="22sp" app:layout_constraintBottom_toTopOf="@+id/tv6" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.182" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.845" /> <TextView android:id="@+id/tv6" android:layout_width="287dp" android:layout_height="54dp" android:fontFamily="@font/light" android:text="Please complete the traffic ticket details for students who violate the rules and laws at UTM." android:textColor="@color/black" android:textSize="14sp" app:layout_constraintBottom_toTopOf="@+id/etUserName" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.395" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.72" /> </androidx.constraintlayout.widget.ConstraintLayout>
CompoundTicket类代码
package com.example.depark.police; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.AutoCompleteTextView; import android.widget.Toast; import com.example.depark.R; public class CompoundTicket extends AppCompatActivity { String[] vehicle = {"Proton","Perodua","Honda","Yamaha"}; AutoCompleteTextView autoCompleteTxt; ArrayAdapter<String> adapterItems; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_compound_ticket); autoCompleteTxt = findViewById(R.id.autoComplete); adapterItems = new ArrayAdapter<String>(this,R.layout.list_type_of_vehicle,vehicle); autoCompleteTxt.setAdapter(adapterItems); autoCompleteTxt.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { String item = parent.getItemAtPosition(position).toString(); Toast.makeText(getApplicationContext(),"Item: "+item,Toast.LENGTH_SHORT).show(); } }); } }
PoliceHomeFragment代码
package com.example.depark.police; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.Nullable; import androidx.annotation.NonNull; import androidx.cardview.widget.CardView; import androidx.fragment.app.Fragment; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProviders; import com.example.depark.HomeViewModel; import com.example.depark.R; import com.google.android.gms.tasks.OnSuccessListener; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.storage.FirebaseStorage; import com.google.firebase.storage.StorageReference; import com.squareup.picasso.Picasso; public class PoliceHomeFragment extends Fragment implements View.OnClickListener{ private HomeViewModel homeViewModel; private FirebaseStorage firebaseStorage; private StorageReference storageReference; private FirebaseAuth firebaseAuth; private ImageView img; private Button b1; private CardView parkingCard, receiptCard, feeCard, valetCard; public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { homeViewModel = ViewModelProviders.of(this).get(HomeViewModel.class); View root = inflater.inflate(R.layout.police_home_fragment, container, false); final TextView textView = root.findViewById(R.id.textView2); homeViewModel.getText().observe(getViewLifecycleOwner(), new Observer<String>() { @Override public void onChanged(@Nullable String s) { textView.setText(s); } }); firebaseStorage = FirebaseStorage.getInstance(); firebaseAuth = FirebaseAuth.getInstance(); img = root.findViewById(R.id.imageView2); b1 = root.findViewById(R.id.btnCheck); // defining cards parkingCard = root.findViewById(R.id.eparking_card); receiptCard = root.findViewById(R.id.receipt_card); feeCard = root.findViewById(R.id.fee_card); valetCard = root.findViewById(R.id.valet_card); // add click listener to the cards parkingCard.setOnClickListener(this); receiptCard.setOnClickListener(this); feeCard.setOnClickListener(this); valetCard.setOnClickListener(this); storageReference = firebaseStorage.getReference(); storageReference.child(firebaseAuth.getUid()). child("Images/Profile Pic"). getDownloadUrl(). addOnSuccessListener(new OnSuccessListener<Uri>() { @Override public void onSuccess (Uri uri){ Picasso.get().load(uri).fit().centerCrop().into(img); } }); return root; } @Override public void onClick(View view) { Intent i; switch (view.getId()) { case R.id.eparking_card : i = new Intent (getActivity(), CompoundTicket.class); startActivity(i); break; // case R.id.receipt_card : i = new Intent (getActivity(), PaymentListFragment.class); startActivity(i); break; //case R.id.fee_card : i = new Intent (getActivity(), StudentListFragment.class); startActivity(i); break; //case R.id.valet_card : i = new Intent (getActivity(), ValetListFragment.class); startActivity(i); break; default:break; } } }
崩溃日志
FATAL EXCEPTION: main Process: com.example.depark, PID: 30834 android.content.ActivityNotFoundException: Unable to find explicit activity class {com.example.depark/com.example.depark.police.CompoundTicket}; have you declared this activity in your AndroidManifest.xml, or does your intent not match its declared <intent-filter>? at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:2197) at android.app.Instrumentation.execStartActivity(Instrumentation.java:1839) at android.app.Activity.startActivityForResult(Activity.java:5471) at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:712) at android.app.Activity.startActivityForResult(Activity.java:5429) at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:693) at android.app.Activity.startActivity(Activity.java:5927) at androidx.core.content.ContextCompat$Api16Impl.startActivity(ContextCompat.java:830) at androidx.core.content.ContextCompat.startActivity(ContextCompat.java:279) at androidx.fragment.app.FragmentHostCallback.onStartActivityFromFragment(FragmentHostCallback.java:167) at androidx.fragment.app.Fragment.startActivity(Fragment.java:1445) at androidx.fragment.app.Fragment.startActivity(Fragment.java:1433) at com.example.depark.police.PoliceHomeFragment.onClick(PoliceHomeFragment.java:92) at android.view.View.performClick(View.java:7506) at android.view.View.performClickInternal(View.java:7483) at android.view.View.-$$Nest$mperformClickInternal(Unknown Source:0) at android.view.View$PerformClick.run(View.java:29334) at android.os.Handler.handleCallback(Handler.java:942) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.app.ActivityThread.main(ActivityThread.java:7872) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
解决方案
从崩溃日志可明确,问题是**CompoundTicket Activity未在AndroidManifest.xml中声明**。所有Android应用的Activity必须在Manifest文件中注册,否则系统无法识别并启动。
修复步骤:
- 打开项目中的
AndroidManifest.xml文件 - 在
<application>标签内部添加CompoundTicketActivity的声明:
<activity android:name=".police.CompoundTicket" android:exported="false" />
- 若该Activity需从外部应用启动,可将
android:exported设为true,否则保持false即可
- 同步项目并重新运行,点击跳转按钮即可正常打开CompoundTicket页面
另外,需确保list_type_of_vehicle布局文件存在,否则下拉菜单可能无法正常显示,但当前崩溃的直接原因是Activity未注册,优先解决该问题。
内容的提问来源于stack exchange,提问作者Kassim
相关产品推荐
相关产品推荐

