首页 > 解决方案 > MainActivity 不能转换为 android.app.Activity

问题描述

我知道这已被多次询问,并且我一直在尝试解决它,但我似乎真的无法理解问题所在。我对 Android Studio 和 Android Room 真的很陌生,所以说实话,我几乎不知道自己在做什么。根据 logcat 告诉我的内容,我假设错误发生在我的“MainActivity.java”类中。这是我的日志猫

2020-06-15 01:33:41.885 21773-21773/com.example.hoply5 E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.hoply5, PID: 21773
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.hoply5/com.example.hoply5.MainActivity}: java.lang.ClassCastException: com.example.hoply5.MainActivity cannot be cast to android.app.Activity
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3272)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3500)
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2049)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:223)
    at android.app.ActivityThread.main(ActivityThread.java:7523)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:941)
 Caused by: java.lang.ClassCastException: com.example.hoply5.MainActivity cannot be cast to android.app.Activity
    at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:95)
    at androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:41)
    at android.app.Instrumentation.newActivity(Instrumentation.java:1253)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3260)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3500) 
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) 
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2049) 
    at android.os.Handler.dispatchMessage(Handler.java:106) 
    at android.os.Looper.loop(Looper.java:223) 
    at android.app.ActivityThread.main(ActivityThread.java:7523) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:941) 

这是我的 MainActivity 类

public class SecondFragment extends Fragment {

EditText editTxtName, editTxtEmail, editTxtPwd, editTextCnfPwd;
Button backBtn, registerBtn;
private UserDao userDao;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_second, container, false);

    editTxtName = view.findViewById(R.id.editName);
    editTxtEmail = view.findViewById(R.id.editEmail);
    editTxtPwd = view.findViewById(R.id.editPwd);
    registerBtn = view.findViewById(R.id.registerBtn2);
    editTextCnfPwd = view.findViewById(R.id.editCnfPwd);
    backBtn = view.findViewById(R.id.backBtn);

    backBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(v.getContext(), MainActivity.class);
            startActivity(intent);
        }

    });

    userDao = Room.databaseBuilder(getActivity(), UserDatabase.class, "User").build().getUserDao();

    registerBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String userName = editTxtName.getText().toString().trim();
            String email = editTxtEmail.getText().toString().trim();
            String password = editTxtPwd.getText().toString().trim();
            String passwordCnf = editTextCnfPwd.getText().toString().trim();

            if(password.equals(passwordCnf)) {
                User user = new User(userName,password,email);
                userDao.insert(user);
                Intent transitionLogin = new Intent(getActivity(), MainActivity.class);
                startActivity(transitionLogin);
            } else {
                Toast.makeText(getActivity(), "Password is not matching", Toast.LENGTH_SHORT).show();
            }
        }
    });
   return view;
}

}

标签: javaandroid

解决方案


你的 MainActivity 是 Fragment,所以你必须替换它


推荐阅读