0

So look I am uploading a picture that the user does choose from his gallery to my firestore and everything is working fine. Additionaly I want to pass the url to the firestorage to the document of that individual user. That document is getting found by the documentId and then I want to update "profileimage" in it with the url to that uploaded picture from the firestorage

package com.LiFit;


import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.viewpager.widget.ViewPager;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.android.material.tabs.TabLayout;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.UserProfileChangeRequest;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.firestore.CollectionReference;
import com.google.firebase.firestore.DocumentReference;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.Query;
import com.google.firebase.firestore.QueryDocumentSnapshot;
import com.google.firebase.firestore.QuerySnapshot;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageReference;
import com.google.firebase.storage.UploadTask;
import com.theartofdev.edmodo.cropper.CropImage;
import com.theartofdev.edmodo.cropper.CropImageView;

import de.hdodenhof.circleimageview.CircleImageView;

import static android.app.Activity.RESULT_OK;

public class ProfileFragment extends Fragment {

    View myFragment;
    ViewPager viewPager;
    TabLayout tabLayout;
    ImageButton calender;
    ImageButton statistics;
    public TextView onProfileShownUsername;
    public MainActivity ma;
    public CircleImageView profilBild;
    final static int gallery_pick = 1;
    private StorageReference userProfileImageRef;
    private FirebaseAuth mAuth;
    private ProgressDialog loadingBar;
    private DocumentReference docRef;
    private FirebaseFirestore db = FirebaseFirestore.getInstance();
    public static String currentUid = "";


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

    public static ProfileFragment getInstance() {
        return new ProfileFragment();
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        myFragment = inflater.inflate(R.layout.fragment_profile, container, false);
        viewPager = myFragment.findViewById(R.id.viewPager);
        tabLayout = myFragment.findViewById(R.id.tabLayout);
        calender = myFragment.findViewById(R.id.prof_ac_calender);
        statistics = myFragment.findViewById(R.id.prof_ac_statistics);
        onProfileShownUsername = myFragment.findViewById(R.id.profile_username);
        mAuth = FirebaseAuth.getInstance();
        loadingBar = new ProgressDialog(getActivity());
        profilBild = myFragment.findViewById(R.id.profile_image);
        userProfileImageRef = FirebaseStorage.getInstance().getReference().child("Profile images");
        String help = ma.userRealName;
        onProfileShownUsername.setText(help);

        calender.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getActivity(), "Open Calender", Toast.LENGTH_LONG).show();
            }
        });

        statistics.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getActivity(), "Open Statistics", Toast.LENGTH_LONG).show();
            }
        });

        profilBild.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent toGallery = new Intent();
                toGallery.setAction(Intent.ACTION_GET_CONTENT);
                toGallery.setType("image/*");
                startActivityForResult(toGallery, gallery_pick);
            }
        });

        return myFragment;
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == gallery_pick && resultCode == RESULT_OK && data != null) {
            Uri ImageUri = data.getData();
            CropImage.activity(ImageUri).setGuidelines(CropImageView.Guidelines.ON).setAspectRatio(1, 1).start(getContext(), this);
        }
        if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
            if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
                Toast.makeText(getActivity(), "Nice", Toast.LENGTH_LONG).show();
                CropImage.ActivityResult result = CropImage.getActivityResult(data);
                if (resultCode == RESULT_OK) {
                    loadingBar.setTitle("Profile Image");
                    loadingBar.setMessage("Please wait, while we are updating your profile image");
                    loadingBar.show();
                    loadingBar.setCanceledOnTouchOutside(true);
                    Uri resultUri = result.getUri();
                    StorageReference filePath = userProfileImageRef.child(currentUid + ".jpg");
                    filePath.putFile(resultUri).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
                        @Override
                        public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
                            if (task.isSuccessful()) {
                                Toast.makeText(getActivity(), "Profile Image uploaded successfully", Toast.LENGTH_LONG).show();
                                loadingBar.dismiss();
                            }
                            final String downloadUrl = task.getResult().getStorage().getDownloadUrl().toString();
                            docRef = db.collection("users").document(ma.documentId);
                            docRef.update("profileimage", task.getResult().getStorage().getDownloadUrl().toString()).addOnCompleteListener(new OnCompleteListener<Void>() {
                                @Override
                                public void onComplete(@NonNull Task<Void> task) {
                                    if (task.isSuccessful()) {
                                        Toast.makeText(getActivity(), "Profile Image stored to Firebase Database", Toast.LENGTH_LONG).show();
                                        loadingBar.dismiss();
                                    } else {
                                        String message = task.getException().getMessage();
                                        Toast.makeText(getActivity(), "Error Occured:" + message, Toast.LENGTH_LONG).show();
                                        loadingBar.dismiss();
                                    }
                                }
                            });
                        }
                    });
                } else {
                    Toast.makeText(getActivity(), "Error Occured: Image can not be cropped", Toast.LENGTH_LONG).show();
                    loadingBar.dismiss();
                }
            }
        }
    }


    //Call onActivity Create method


    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        setUpViewPager(viewPager);
        tabLayout.setupWithViewPager(viewPager);

        tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {

            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {

            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {

            }
        });
    }


    private void setUpViewPager(ViewPager viewPager) {
        SectionPagerAdapter adapter = new SectionPagerAdapter(getChildFragmentManager());

        adapter.addFragment(new PhotosFragment(), "Photos");
        adapter.addFragment(new PostsFragment(), "Posts");
        adapter.addFragment(new WorkoutsFragment(), "Workouts");
        adapter.addFragment(new RecipesFragment(), "Recipes");

        viewPager.setAdapter(adapter);
    }

    private Context ctx;
    public ProfileFragment(Context ctx){
        this.ctx = ctx;
    }
}

and here the main activity because I got some parameters from there:

package com.LiFit;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.google.firebase.FirebaseApp;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.firestore.CollectionReference;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.Query;
import com.google.firebase.firestore.QueryDocumentSnapshot;
import com.google.firebase.firestore.QuerySnapshot;

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";
    private FirebaseAuth mAuth;
    private DatabaseReference userRef;
    private Button toolbarButton, toolbarButton2;
    public boolean chat = true ;
    private Fragment SettingsFragment;
    private FirebaseFirestore db = FirebaseFirestore.getInstance();
    private CollectionReference noteRef;
    public static String fullUsername = "";
    public static String userRealName = "";
    public static String documentId = "";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        FirebaseApp.initializeApp(MainActivity.this);
        setContentView(R.layout.activity_main);
        mAuth = FirebaseAuth.getInstance();
        toolbarButton = (Button) findViewById(R.id.toolbar_action_1);
        toolbarButton2 = (Button) findViewById(R.id.toolbar_action_2);
        final BottomNavigationView bottomNav = findViewById(R.id.bottom_nav);
        bottomNav.setOnNavigationItemSelectedListener(navListener);
        toolbarButton2.setVisibility(View.GONE);
        toolbarButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                toolbarAction();
            }
        });
        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                    new HomeFragment()).commit();
        }
        //Username
        String currentUid = mAuth.getCurrentUser().getUid();
        noteRef = db.collection("users");
        Query query = noteRef.whereEqualTo("uid", currentUid);
        query.get()
                .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<QuerySnapshot> task) {
                        if (task.isSuccessful()) {
                            for (QueryDocumentSnapshot document : task.getResult()) {
                                //Log.d(TAG, document.getId() + " => " + document.getData().get("username"));
                                fullUsername = document.getData().get("username").toString();
                                documentId = document.getId();
                            }
                        } else {
                            Log.d(TAG, "Error getting documents: ", task.getException());
                        }
                    }
                });

        query.get()
                .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<QuerySnapshot> task) {
                        if (task.isSuccessful()) {
                            for (QueryDocumentSnapshot document : task.getResult()) {
                                //Log.d(TAG, document.getId() + " => " + document.getData().get("username"));
                                userRealName = document.getData().get("fullname").toString();
                            }
                        } else {
                            Log.d(TAG, "Error getting documents: ", task.getException());
                        }
                    }
                });
    }

    @Override
    protected void onStart() {
        super.onStart();

        FirebaseUser currentUser = mAuth.getCurrentUser();
        if(currentUser == null){
            SendUserToLoginActivity();
        }
    }


    private void SendUserToLoginActivity() {
        Intent loginIntent = new Intent(MainActivity.this, LoginActivity.class);
        loginIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        startActivity(loginIntent);
        finish();
    }


    private BottomNavigationView.OnNavigationItemSelectedListener navListener =
            new BottomNavigationView.OnNavigationItemSelectedListener() {
                @Override
                public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                    Fragment selectedFragment = null;
                    TextView text1 = findViewById(R.id.screen_title);
                    switch (item.getItemId()) {
                        case R.id.nav_home:
                            selectedFragment = new HomeFragment();
                            toolbarButton.setBackground(ContextCompat.getDrawable(MainActivity.this, R.drawable.ic_action_chat));
                            text1.setText("FEED");
                            chat = true;
                            break;
                        case R.id.nav_nutrition:
                            selectedFragment = new NutritionFragment();
                            toolbarButton.setBackground(ContextCompat.getDrawable(MainActivity.this, R.drawable.ic_action_chat));
                            text1.setText("NUTRITION");
                            chat = true;
                            break;
                        case R.id.nav_workout:
                            selectedFragment = new WorkoutFragment();
                            toolbarButton.setBackground(ContextCompat.getDrawable(MainActivity.this, R.drawable.ic_action_chat));
                            text1.setText("WORKOUT");
                            chat = true;
                            break;
                        case R.id.nav_search:
                            selectedFragment = new SearchFragment();
                            toolbarButton.setBackground(ContextCompat.getDrawable(MainActivity.this, R.drawable.ic_action_chat));
                            text1.setText("SEARCH");
                            chat = true;
                            break;
                        case R.id.nav_profile:
                            selectedFragment = new ProfileFragment();
                            toolbarButton.setBackground(ContextCompat.getDrawable(MainActivity.this, R.drawable.ic_action_settings));
                            text1.setText(fullUsername);
                            chat = false;
                            break;
                    }
                        getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, selectedFragment).commit();
                    return true;
                }
            };

    private void toolbarAction() {
        TextView text1 = findViewById(R.id.screen_title);
        if(chat == true){
            Toast.makeText(this, documentId , Toast.LENGTH_SHORT).show();
        } else {
            SendUserToSettingsActivity();
            chat = false;
        }
    }

    private void SendUserToSettingsActivity() {
        Intent mainIntent = new Intent(MainActivity.this, SettingsActivity.class);
        startActivity(mainIntent);
    }
}
Frank van Puffelen
  • 565,676
  • 79
  • 828
  • 807
Lucas Goldner
  • 617
  • 9
  • 29
  • This `final String downloadUrl = task.getResult().getStorage().getDownloadUrl().toString();` doesn't work, and hasn't worked since May 2016. See https://stackoverflow.com/questions/37374868/how-to-get-url-from-firebase-storage-getdownloadurl – Frank van Puffelen Apr 21 '20 at 16:54
  • what can I use instead of this line ? – Lucas Goldner Apr 21 '20 at 20:50
  • If you check my answer to the question I linked (or the [documentation](https://firebase.google.com/docs/storage/android/download-files#download_data_via_url) for that matter), you will see an example of how to get the download URL. – Frank van Puffelen Apr 21 '20 at 23:07

0 Answers0