java.lang.RuntimeException:无法实例化活动组件信息{.UpdateProfileFragment无法强制转换为android.app.activity

java.lang.RuntimeException:无法实例化活动组件信息{.UpdateProfileFragment无法强制转换为android.app.activity,java,android,android-fragmentactivity,Java,Android,Android Fragmentactivity,单击AccountFragment中的按钮后出现此错误 public class AccountFragment extends Fragment { private static final String TAG = "Profile" ; FirebaseAuth firebaseAuth; FirebaseUser currentUser; DatabaseReference databaseReference; TextView tv_name,

单击AccountFragment中的按钮后出现此错误

public class AccountFragment extends Fragment  {
    private static final String TAG = "Profile" ;
    FirebaseAuth firebaseAuth;
    FirebaseUser currentUser;
    DatabaseReference databaseReference;
    TextView tv_name, tv_email, tv_gender, tv_home, tv_phone;
    private String userID;
    Button btn_update;



    public AccountFragment() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_account, container, false);

        tv_name=view.findViewById(R.id.tv_name);
        tv_email=view.findViewById(R.id.tv_email);
        tv_gender=view.findViewById(R.id.tv_gender);
        tv_home=view.findViewById(R.id.tv_home);
        tv_phone=view.findViewById(R.id.tv_phone);
        btn_update=view.findViewById(R.id.btn_update);


        //ini
        firebaseAuth = FirebaseAuth.getInstance();
        currentUser = firebaseAuth.getCurrentUser();
        userID = currentUser.getUid();
        databaseReference = FirebaseDatabase.getInstance().getReference("Customer").child(firebaseAuth.getUid());

        //For Retrieve Information
        databaseReference.addValueEventListener(new ValueEventListener() {


            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                Log.d( TAG, "onDataChange :" +dataSnapshot);

                    Customer cust = dataSnapshot.getValue(Customer.class);
                    tv_name.setText(cust.getName());
                    tv_email.setText(cust.getEmail());
                    tv_gender.setText(cust.getGender());
                    tv_home.setText(cust.getHome_address());
                    tv_phone.setText(cust.getTelephone_number());

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });

        //For Update Method

        btn_update.setOnClickListener( new View.OnClickListener(){
            @Override
            public void onClick(View view) {
                openUpdateProfile();
            }
        });

        return view;
    }

    // For update and pass information method
    private void openUpdateProfile() {


        Intent intent= new Intent(getActivity(), UpdateProfileFragment.class);

        //pass value from current to next page
        intent.putExtra("name",tv_name.getText().toString().trim());
        intent.putExtra("email", tv_email.getText().toString().trim());
        intent.putExtra("Home Address",tv_home.getText().toString().trim());
        intent.putExtra("Telephone", tv_phone.getText().toString().trim());
        startActivity(intent);

    }
点击按钮后,我得到了这个错误 2019-09-22:20:32.7576631-6631/com.example.g E/AndroidRuntime:FATAL EXCEPTION:main 进程:com.example.g,PID:6631 java.lang.RuntimeException:无法实例化活动组件信息{com.example.g/com.example.g.UpdateProfileFragment}:java.lang.ClassCastException:com.example.g.UpdateProfileFragment无法转换为android.app.activity 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2843) 位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048) 在android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 在android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)中 在android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)中 在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808) 位于android.os.Handler.dispatchMessage(Handler.java:106) 位于android.os.Looper.loop(Looper.java:193) 位于android.app.ActivityThread.main(ActivityThread.java:6669) 位于java.lang.reflect.Method.invoke(本机方法) 位于com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 原因:java.lang.ClassCastException:com.example.gerobokgo.UpdateProfileFragment无法强制转换为android.app.Activity 位于android.app.AppComponentFactory.InstanceActivity(AppComponentFactory.java:69) 位于androidx.core.app.CoreComponentFactory.InstanceActivity(CoreComponentFactory.java:41) 位于android.app.Instrumentation.newActivity(Instrumentation.java:1215) 位于android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2831) 位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048) 在android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 在android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)中 在android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)中 在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808) 位于android.os.Handler.dispatchMessage(Handler.java:106) 位于android.os.Looper.loop(Looper.java:193) 位于android.app.ActivityThread.main(ActivityThread.java:6669) 位于java.lang.reflect.Method.invoke(本机方法) 位于com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

UpdateProfileFragment

public class UpdateProfileFragment extends Fragment implements View.OnClickListener {
    EditText tv_name, tv_email, tv_home, tv_phone;
    Button btn_update;

    FirebaseAuth firebaseAuth;
    FirebaseUser currentUser;
    DatabaseReference databaseReference;


    public UpdateProfileFragment() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_update_profile, container, false);


        //get data from intert (data from previous page)

        Intent intent = getActivity().getIntent();
        String name = intent.getStringExtra("Name");
        String email = intent.getStringExtra("Email");
        String address = intent.getStringExtra(" Shipping Address");
        String phone = intent.getStringExtra("Telephone Number");

        //ini
        firebaseAuth = FirebaseAuth.getInstance();
        currentUser = firebaseAuth.getCurrentUser();
        databaseReference = FirebaseDatabase.getInstance().getReference("Customer").child(firebaseAuth.getUid());

        tv_name = view.findViewById(R.id.tv_name);
        tv_email = view.findViewById(R.id.tv_email);
        tv_home = view.findViewById(R.id.tv_home);
        tv_phone = view.findViewById(R.id.tv_phone);

        tv_name.setText(name);
        tv_email.setText(email);
        tv_home.setText(address);
        tv_phone.setText(phone);

        btn_update.setOnClickListener(this);


        return view;
    }

    @Override
    public void onClick(View view) {

    }

    private void updateProfile() {
        Intent intent = getActivity().getIntent();

        String userUid = firebaseAuth.getCurrentUser().getUid();
        String name = tv_name.getText().toString().trim();
        String email = tv_email.getText().toString().trim();
        String home = tv_home.getText().toString().trim();
        String phone = tv_phone.getText().toString().trim();

        Customer cust = new Customer(userUid, name, email, home, phone);
        databaseReference.child("Customer").child(userUid).setValue(cust).addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if (task.isSuccessful()) {
                    Toast.makeText(getActivity(), "Update Successfully", Toast.LENGTH_SHORT).show();
                    getActivity().finish();
                    startActivity(new Intent(getActivity(), AccountFragment.class));


                }
            }
        });
    }
}
公共类UpdateProfileFragment扩展片段实现View.OnClickListener{
编辑文本电视名称、电视电子邮件、电视主页、电视电话;
按钮btn_更新;
FirebaseAuth FirebaseAuth;
FirebaseUser当前用户;
数据库参考数据库参考;
公共更新profilefragment(){
//必需的空公共构造函数
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//为该碎片膨胀布局
视图=充气机。充气(R.layout.fragment\u update\u profile,container,false);
//从intert获取数据(上一页的数据)
Intent Intent=getActivity().getIntent();
字符串名称=intent.getStringExtra(“名称”);
字符串email=intent.getStringExtra(“电子邮件”);
字符串地址=intent.getStringExtra(“发货地址”);
String phone=intent.getStringExtra(“电话号码”);
//伊尼
firebaseAuth=firebaseAuth.getInstance();
currentUser=firebaseAuth.getCurrentUser();
databaseReference=FirebaseDatabase.getInstance().getReference(“客户”).child(firebaseAuth.getUid());
tv_name=view.findviewbyd(R.id.tv_name);
tv_email=view.findviewbyd(R.id.tv_email);
tv\u home=view.findviewbyd(R.id.tv\u home);
tv\u phone=view.findviewbyd(R.id.tv\u phone);
tv_name.setText(名称);
tv_email.setText(电子邮件);
tv_home.setText(地址);
tv_phone.setText(电话);
btn_update.setOnClickListener(此);
返回视图;
}
@凌驾
公共void onClick(视图){
}
私有void updateProfile(){
Intent Intent=getActivity().getIntent();
字符串userUid=firebaseAuth.getCurrentUser().getUid();
String name=tv_name.getText().toString().trim();
字符串email=tv_email.getText().toString().trim();
String home=tv_home.getText().toString().trim();
字符串phone=tv_phone.getText().toString().trim();
Customer cust=新客户(userUid、姓名、电子邮件、主页、电话);
databaseReference.child(“客户”).child(userUid).setValue(cust).addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
Toast.makeText(getActivity(),“更新成功”,Toast.LENGTH_SHORT.show();
getActivity().finish();
startActivity(新意图(getActivity(),AccountFragment.class));
}
}
});
}
}

您无法使用startActivity打开片段,您需要实现一个回调,当您的用户配置文件成功更新时会触发该回调。在主机活动中,创建一个如下界面:

public interface UpdateProfileSuccess{
    void presentAccountFragment();
}
在活动中也将其实例化为:

UpdateProfileSuccess callback = new UpdateProfileSuccess(){
@Override
void presentAccountFragment(){
getSupportFragmentManager().beginTransaction().replace(R.id.container,new 
        AccuontFragment()).commit();
    }
}
在更新配置文件片段中,使构造函数接受该调用
private MainActivity.UpdateProfileSuccess callback;
public UpdateProfileFragment(MainActivity.UpdateProfileSuccess callback){
    this.callback = callback;
}
callback.presentAccountFragment();