I am following a course on youtube to create an app and I followed it exactly. However, the app is still crashing. I updated all the implementations to the latest version. I also checked other posts and couldn't find anything. I am attaching my logcat and PostActivity.java below. Thanks!
Post Activity:
package com.example.simplysnap;import androidx.annotation.NonNull;import androidx.annotation.Nullable;import androidx.appcompat.app.AppCompatActivity;import android.app.ProgressDialog;import android.content.ContentResolver;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.view.View;import android.webkit.MimeTypeMap;import android.widget.EditText;import android.widget.ImageView;import android.widget.TextView;import android.widget.Toast;import com.google.android.gms.tasks.Continuation;import com.google.android.gms.tasks.OnCompleteListener;import com.google.android.gms.tasks.OnFailureListener;import com.google.android.gms.tasks.Task;import com.google.firebase.auth.FirebaseAuth;import com.google.firebase.database.DatabaseReference;import com.google.firebase.database.FirebaseDatabase;import com.google.firebase.storage.FirebaseStorage;import com.google.firebase.storage.StorageReference;import com.google.firebase.storage.StorageTask;import com.theartofdev.edmodo.cropper.CropImage;import java.util.HashMap;public class PostActivity extends AppCompatActivity { Uri imageUri; String myUri = ""; StorageTask uploadTask; StorageReference storageReference; ImageView close, image_added; TextView post; EditText description; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_post); close = findViewById(R.id.close); image_added = findViewById(R.id.image_added); post = findViewById(R.id.post); description = findViewById(R.id.description); storageReference = FirebaseStorage.getInstance().getReference("posts"); close.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(PostActivity.this, MainActivity.class)); finish(); } }); post.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { uploadImage(); } }); CropImage.activity() .setAspectRatio(1, 1) .start(PostActivity.this); } private String getFileExtension(Uri uri){ ContentResolver contentResolver = getContentResolver(); MimeTypeMap mime = MimeTypeMap.getSingleton(); return mime.getExtensionFromMimeType(contentResolver.getType(uri)); } private void uploadImage(){ final ProgressDialog progressDialog = new ProgressDialog(this); progressDialog.setMessage("Posting..."); progressDialog.show(); if (imageUri != null){ final StorageReference filereference = storageReference.child(System.currentTimeMillis()+"." + getFileExtension(imageUri)); uploadTask = filereference.putFile(imageUri); uploadTask.continueWithTask(new Continuation() { @Override public Object then(@NonNull Task task) throws Exception { if (!task.isSuccessful()) { throw task.getException(); } return filereference.getDownloadUrl(); } }).addOnCompleteListener(new OnCompleteListener<Uri>() { @Override public void onComplete(@NonNull Task task) { if (task.isSuccessful()) { Uri downloadUri = (Uri) task.getResult(); myUri = downloadUri.toString(); DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Posts"); String postid = reference.push().getKey(); HashMap<String, Object> hashMap = new HashMap<>(); hashMap.put("postid", postid); hashMap.put("postimage", myUri); hashMap.put("description", description.getText().toString()); hashMap.put("publisher", FirebaseAuth.getInstance().getCurrentUser().getUid()); reference.child(postid).setValue(hashMap); progressDialog.dismiss(); startActivity(new Intent(PostActivity.this, MainActivity.class)); finish(); } else { Toast.makeText(PostActivity.this, "", Toast.LENGTH_SHORT).show(); } } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { Toast.makeText(PostActivity.this, ""+e.getMessage(), Toast.LENGTH_SHORT).show(); } }); } else { Toast.makeText(this, "No Image Selected!", Toast.LENGTH_SHORT).show(); } } @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE && resultCode == RESULT_OK) { CropImage.ActivityResult result = CropImage.getActivityResult(data); imageUri = result.getUri(); image_added.setImageURI(imageUri); } else { Toast.makeText(this, "Something went wrong!", Toast.LENGTH_SHORT).show(); startActivity(new Intent(PostActivity.this, MainActivity.class)); finish(); } }}
LogCat w/ FATAL ERROR:
2020-07-04 10:26:58.643 22864-22864/com.example.simplysnap E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.simplysnap, PID: 22864 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.simplysnap/com.example.simplysnap.PostActivity}: android.view.InflateException: Binary XML file line #34 in com.example.simplysnap:layout/activity_post: androidx.appcompat.widget.AppCompatImageView cannot be cast to android.view.ViewGroup at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3448) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3595) 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:2147) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:237) at android.app.ActivityThread.main(ActivityThread.java:7811) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1076) Caused by: android.view.InflateException: Binary XML file line #34 in com.example.simplysnap:layout/activity_post: androidx.appcompat.widget.AppCompatImageView cannot be cast to android.view.ViewGroup Caused by: java.lang.ClassCastException: androidx.appcompat.widget.AppCompatImageView cannot be cast to android.view.ViewGroup at android.view.LayoutInflater.rInflate(LayoutInflater.java:1124) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1084) at android.view.LayoutInflater.rInflate(LayoutInflater.java:1126) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1084) at android.view.LayoutInflater.rInflate(LayoutInflater.java:1126) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1084) at android.view.LayoutInflater.rInflate(LayoutInflater.java:1126) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1084) at android.view.LayoutInflater.rInflate(LayoutInflater.java:1126) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1084) at android.view.LayoutInflater.inflate(LayoutInflater.java:682) at android.view.LayoutInflater.inflate(LayoutInflater.java:534) at android.view.LayoutInflater.inflate(LayoutInflater.java:481) at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555) at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161) at com.example.simplysnap.PostActivity.onCreate(PostActivity.java:47) at android.app.Activity.performCreate(Activity.java:7955) at android.app.Activity.performCreate(Activity.java:7944) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1307) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3423) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3595) 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:2147) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:237) at android.app.ActivityThread.main(ActivityThread.java:7811) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1076)