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);
}
}