Search code examples
androidimagefirebasenullbundle

how to get selected image from one activity to second activity from firebase


I am new to android development I want to show image in another fragment by getting selected image from first activity but I am getting error

this is my grid view where user selects image

@Override
public void onGridImageSelected(Photo photo, int activityNumber) {
    Log.d(TAG, "onGridImageSelected: selected an image gridview: " + photo.toString());
   FullScreenProductFragment fragment = new FullScreenProductFragment();
    Bundle args = new Bundle();
    args.putParcelable(getString(R.string.photo), photo);
    args.putInt(getString(R.string.activity_number), activityNumber);
    fragment.setArguments(args);
    FragmentTransaction transaction  = getSupportFragmentManager().beginTransaction();
    transaction.replace(R.id.Profilecontainer, fragment);
    transaction.addToBackStack(getString(R.string.view_post_fragment));
    transaction.commit();
}

this is were the selected image should view

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragmentfullscreenlayout, container, false);
    mImageView = view.findViewById(R.id.zoom_image);

    Bundle bundle = getActivity().getIntent().getExtras();

    UnivarsalImageLoader.setImage(getPhotoFromBundle().getImage_path(),mImageView, null, "");
    Log.d(TAG, "onCreateView: getphoto from bundle"+getPhotoFromBundle().getImage_path());

    return view;
}
private Photo getPhotoFromBundle(){
    Log.d(TAG, "getPhotoFragment: argumentd"+getArguments());
    Bundle bundle = this.getArguments();

    if (bundle != null){
        return bundle.getParcelable(getString(R.string.photo));
    }else {
        return null;
    }
}

this is my log

java.lang.NullPointerException: Attempt to invoke virtual method  'java.lang.String com.example.alpha.lapid.models.Photo.getImage_path()' on a null object reference
    at com.example.alpha.lapid.Utils.FullScreenProductFragment.onCreateView(FullScreenProductFragment.java:56)
    at android.support.v4.app.Fragment.performCreateView(Fragment.java:2346)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.j va:1428)

when I log this getphotobundle in fragment I am not getting any thing where is the problem please tell me

 05-20 08:52:23.534 668-668/com.example.alpha.lapid 
        D/FullScreenProductFragme: getPhotoFragment: argumentdBundle[{}]

Solution

  • I solved by calling this in my main activity were I was calling fragment if you are trying to get all photo details of selected image you can use this code else you want single image use my friend greenapps code on

    public class Profile_Activity extends AppCompatActivity implements
        ProfileFragment.OnGridImageSelectedListner ,
        ViewPostFragment.OnCommentThreadSelectedListener,
        ViewProfileFragment.OnGridImageSelectedListner,
    

    ViewPostFragment.Ontiemlistner{

    private static final String TAG = "ProfileActivity";
    @Override
    public void ontimlistner(Photo photo) {
        Bundle args = new Bundle();
        FullScreenProductFragment fragment = new FullScreenProductFragment();
        args.putParcelable("large", photo);
        fragment.setArguments(args);
        FragmentTransaction transaction  = getSupportFragmentManager().beginTransaction();
        transaction.replace(R.id.full_screen_container, fragment);
        transaction.addToBackStack(getString(R.string.fragment_full_screen_product));
        transaction.commit();
    }
    @Override
    public void onCommentThreadSelectedListener(Photo photo) {
        ViewCommetFragment fragment = new ViewCommetFragment();
        Bundle args = new Bundle();
        args.putParcelable(getString(R.string.photo), photo);
        fragment.setArguments(args);
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        transaction.replace(R.id.Profilecontainer, fragment);
        transaction.addToBackStack(getString(R.string.view_comments_fragment));
        transaction.commit();
    }
    @Override
    public void onGridImageSelected(Photo photo, int activityNumber) {
        Log.d(TAG, "onGridImageSelected: selected an image gridview: " + photo.toString());
        ViewPostFragment fragment = new ViewPostFragment();
    
        Bundle args = new Bundle();
        args.putParcelable(getString(R.string.photo), photo);
        args.putInt(getString(R.string.activity_number), activityNumber);
        fragment.setArguments(args);
        FragmentTransaction transaction  = getSupportFragmentManager().beginTransaction();
        transaction.replace(R.id.Profilecontainer, fragment);
        transaction.addToBackStack(getString(R.string.view_post_fragment));
        transaction.commit();
    }
    

    and I called it in fragment where I want that image to shown

    public FullScreenProductFragment(){
    super();
    setArguments(new Bundle());
    }
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable      ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragmentfullscreenlayout,    container, false);
        mImageView = view.findViewById(R.id.zoom_image);
        Bundle bundle = this.getArguments();
    
    
         photo = getPhotoFromBundle();
    
        setProduct();
    
    
    
        return view;
    }
    
     public Photo getPhotoFromBundle(){
        Log.d(TAG, "getPhotoFragment: argumentd"+getArguments());
        Bundle bundle = this.getArguments();
        if (bundle != null){
            return bundle.getParcelable("large");
        }else {
            return null;
        }
       }
    

    this code in fragment where i added on click listener on that grid view

     public  interface  Ontiemlistner{
     void ontimlistner(Photo photo);
     }
     Ontiemlistner ontiemlistner;
     public ViewPostFragment(){
     super();
     setArguments(new Bundle());
     }
    
    
    added this code in my gridon item click listener 
    
     Photo = mPhoto;
     ontiemlistner.ontimlistner(mPhoto);