-1
    package com.lukaut.android.fragments;


    import android.Manifest;
    import android.app.ProgressDialog;
    import android.content.ContentResolver;
    import android.content.Intent;
    import android.content.pm.PackageManager;
    import android.graphics.Bitmap;
    import android.net.Uri;
    import android.os.Bundle;
    import android.provider.MediaStore;
    import android.support.annotation.NonNull;
    import android.support.annotation.Nullable;
    import android.support.v4.app.ActivityCompat;
    import android.support.v4.app.Fragment;
    import android.support.v4.app.FragmentTransaction;
    import android.support.v4.content.ContextCompat;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.webkit.MimeTypeMap;
    import android.widget.EditText;
    import android.widget.ImageView;
    import android.widget.ProgressBar;
    import android.widget.Toast;

    import com.bumptech.glide.Glide;
    import com.google.android.gms.tasks.OnFailureListener;
    import com.google.android.gms.tasks.OnSuccessListener;
    import com.google.firebase.auth.FirebaseAuth;
    import com.google.firebase.firestore.DocumentSnapshot;
    import com.google.firebase.firestore.FirebaseFirestore;
    import com.google.firebase.firestore.SetOptions;
    import com.google.firebase.storage.FirebaseStorage;
    import com.google.firebase.storage.OnProgressListener;
    import com.google.firebase.storage.StorageReference;
    import com.google.firebase.storage.UploadTask;
    import com.lukaut.android.Model.UserModel;
    import com.lukaut.android.R;
    import com.squareup.picasso.Picasso;

    import java.io.IOException;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;

    import butterknife.BindView;
    import butterknife.ButterKnife;
    import butterknife.OnClick;

    import static android.app.Activity.RESULT_OK;

/**
 * A simple {@link Fragment} subclass.
 */
public class EditProfileFragment extends Fragment {

    private static final int STORAGE_PERMISSION_CODE = 23;
    private FirebaseAuth mAuth;
    UploadTask uploadTask;
    public static final int PICK_IMAGE = 1;
    ProgressBar progressBar;

    FirebaseFirestore firestore;
    private static final String TAG = "Editprofile";
    @BindView(R.id.edit_fullname)EditText edit_user_fullname;
    @BindView(R.id.edit_email)EditText edit_user_email;
    @BindView(R.id.edit_mobile)EditText edit_user_phoneno;
    @BindView(R.id.edit_age)EditText edit_user_age;
    @BindView(R.id.edit_e_fullname_1)EditText edit_e_fullname_1;
    @BindView(R.id.edit_e_fullname_2)EditText edit_e_fullname_2;
    @BindView(R.id.edit_e_fullname_3)EditText edit_e_fullname_3;
    @BindView(R.id.edit_e_number_1)EditText edit_e_number_1;
    @BindView(R.id.edit_e_number_2)EditText edit_e_number_2;
    @BindView(R.id.edit_e_number_3)EditText edit_e_number_3;

    private static final int GALLERY_INTENT = 2;

    private StorageReference storageReference,imageRef;
    ProgressDialog progressDialog;
    Uri selectedImage;
    @BindView(R.id.img_user_profile_pic)
    ImageView img_user_profile_pic;

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

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(false);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View v = inflater.inflate(R.layout.fragment_edit_profile, container, false);
        ButterKnife.bind(this,v);
        getActivity().setTitle("Edit your profile");
        firestore = FirebaseFirestore.getInstance();

        mAuth = FirebaseAuth.getInstance();
        storageReference = FirebaseStorage.getInstance().getReference();
        getUserDetails(mAuth.getUid());

        return  v;
    }

    private void getUserDetails(String uid) {

        firestore.collection("Users").document(mAuth.getUid()).get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
            @Override
            public void onSuccess(DocumentSnapshot documentSnapshot) {
                try {
                    UserModel userModel = documentSnapshot.toObject(UserModel.class);
                    //if (!userModel.getUserEmail().isEmpty() || !userModel.getUserEmail().equals("")) {
                     //   loadHomeFragment();
                    //} else {
                        edit_user_fullname.setText(userModel.getUserFullName());
                        edit_user_email.setText(userModel.getUserEmail());
                        edit_user_age.setText(userModel.getUserAge());
                        edit_user_phoneno.setText(userModel.getUserPhoneNo());
                        edit_e_fullname_1.setText(userModel.getEmergency_UserFullName_1());
                        edit_e_fullname_2.setText(userModel.getEmergency_UserFullName_2());
                        edit_e_fullname_3.setText(userModel.getEmergency_UserFullName_3());
                        edit_e_number_1.setText(userModel.getEmergency_UserPhoneNo_1());
                        edit_e_number_2.setText(userModel.getEmergency_UserPhoneNo_2());
                        edit_e_number_3.setText(userModel.getEmergency_UserPhoneNo_3());
                        if (!userModel.getUserProfilePic().equals("") ||!userModel.getUserProfilePic().isEmpty()){
//                            Glide.with(getActivity()).load(userModel.getUserProfilePic()).into(img_user_profile_pic);

Facing an error in below line

 Picasso.with(getActivity()).load(userModel.getUserProfilePic()).placeholde r(R.drawable.placeholder).into(img_user_profile_pic);
                        }
                    //}
                        }catch(Exception e){
                            e.printStackTrace();
                            Log.d(TAG, "user details " + e.getMessage());

                    }

                }
            }).addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    e.printStackTrace();

                }
            });
        }
        @OnClick(R.id.button_save_details)public void saveDetails() {

            final String userFullNameText = edit_user_fullname.getText().toString();
            final String userEmailText = edit_user_email.getText().toString();
            final String userPhoneNoText = edit_user_phoneno.getText().toString();
            final String userAgeText = edit_user_age.getText().toString();
            final String euserFullName_1 = edit_e_fullname_1.getText().toString();
            final String euserFullName_2 = edit_e_fullname_2.getText().toString();
            final String euserFullName_3 = edit_e_fullname_3.getText().toString();
            final String euserPhoneno_1 = edit_e_number_1.getText().toString();
            final String euserPhoneno_2 = edit_e_number_2.getText().toString();
            final String euserPhoneno_3 = edit_e_number_3.getText().toString();
            String regx = "^[\\p{L} .'-]+$";
            CharSequence inputStr = edit_user_fullname.getText().toString();
            Pattern pattern = Pattern.compile(regx);
            Matcher matcher = pattern.matcher(inputStr);
            if (!matcher.matches()) {
                Toast.makeText(getActivity(), "Plz enter valid full name", Toast.LENGTH_SHORT).show();
                return;
            }

            if (selectedImage != null) {
                imageRef = storageReference.child("profile/" + System.currentTimeMillis() + "." + GetFileExtension(selectedImage));
                progressDialog = new ProgressDialog(getActivity());
                progressDialog.setMax(100);
                progressDialog.setMessage("Uploading...");
                progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                progressDialog.show();
                progressDialog.setCancelable(false);
                //starting upload
                uploadTask = imageRef.putFile(selectedImage);
                // Observe state change events such as progress, pause, and resume
                uploadTask.addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
                        double progress = (100.0 * taskSnapshot.getBytesTransferred()) / taskSnapshot.getTotalByteCount();
                        //sets and increments value of progressbar
                        progressDialog.incrementProgressBy((int) progress);
                    }
                });
                uploadTask.addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Toast.makeText(getActivity(), "Error in uploading!", Toast.LENGTH_SHORT).show();
                        progressDialog.dismiss();
                    }
                }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                        // taskSnapshot.getMetadata() contains file metadata such as size, content-type, and download URL.
                        Uri downloadUrl = taskSnapshot.getDownloadUrl();
                        Log.d(TAG, "image uploaded at :" + downloadUrl);
                        final UserModel userModel = new UserModel(mAuth.getUid(), userFullNameText, userEmailText, userPhoneNoText, userAgeText, euserFullName_1, euserFullName_2, euserFullName_3, euserPhoneno_1, euserPhoneno_2, euserPhoneno_3,downloadUrl.toString());
                        firestore.collection("Users").document(mAuth.getUid()).set(userModel, SetOptions.merge()).addOnSuccessListener(new OnSuccessListener<Void>() {
                            @Override
                            public void onSuccess(Void aVoid) {
                                Log.d(TAG, "DocumentSnapshot successfully written!" + userModel.toString());
                                Toast.makeText(getActivity(), "Successfully Saved", Toast.LENGTH_SHORT).show();
                               // loadHomeFragment();
                            }
                        }).addOnFailureListener(new OnFailureListener() {
                            @Override
                            public void onFailure(@NonNull Exception e) {
                                Log.w(TAG, "Error writing document", e);
                            }
                        });
                        Toast.makeText(getActivity(), "Upload successful", Toast.LENGTH_SHORT).show();
                        progressDialog.dismiss();
                        //showing the uploaded image in ImageView using the download url
                        //Picasso.with(UploadActivity.this).load(downloadUrl).into(img_user_profile_pic);
                    }
                });
            } else {
                final UserModel userModel = new UserModel(mAuth.getUid(), userFullNameText, userEmailText, userPhoneNoText, userAgeText, euserFullName_1, euserFullName_2, euserFullName_3, euserPhoneno_1, euserPhoneno_2, euserPhoneno_3);
                firestore.collection("Users").document(mAuth.getUid()).set(userModel, SetOptions.merge()).addOnSuccessListener(new OnSuccessListener<Void>() {
                    @Override
                    public void onSuccess(Void aVoid) {

                        Log.d(TAG, "DocumentSnapshot successfully written!" + userModel.toString());
                        Toast.makeText(getActivity(), "Successfully Saved", Toast.LENGTH_SHORT).show();
    //                    loadHomeFragment();
                    }
                }).addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Log.w(TAG, "Error writing document", e);
                    }
                });
            }
        }
        public String GetFileExtension(Uri uri) {

            ContentResolver contentResolver = getActivity().getContentResolver();

            MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();

            // Returning the file Extension.
            return mimeTypeMap.getExtensionFromMimeType(contentResolver.getType(uri)) ;

        }
        private void loadHomeFragment() {
            Fragment homef = new MapsFragment();
            FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
            ft.setCustomAnimations(R.anim.fragment_slide_left_enter, R.anim.fragment_slide_left_exit, R.anim.fragment_slide_right_enter, R.anim.fragment_slide_right_exit);
            ft.replace(R.id.container, homef);
            ft.commit();
        }

        @OnClick(R.id.img_user_profile_pic)
        public void uploadImage(){
            if (isReadStorageAllowed()){
    //            Intent i = new Intent(Intent.ACTION_PICK);
    //            i.setType("image/*");
    //            startActivityForResult(i,GALLERY_INTENT);
                Intent getIntent = new Intent(Intent.ACTION_GET_CONTENT);
                getIntent.setType("image/*");

                Intent pickIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                pickIntent.setType("image/*");

                Intent chooserIntent = Intent.createChooser(getIntent, "Select image to upload");
                chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] {pickIntent});
                startActivityForResult(chooserIntent,GALLERY_INTENT);

            }else {
                requestStoragePermission();
            }
        }

    //    private void pickImage(){
    //        Intent getIntent = new Intent(Intent.ACTION_GET_CONTENT);
    //        getIntent.setType("image/*");
    //
    //        Intent pickIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    //        pickIntent.setType("image/*");
    //
    //        Intent chooserIntent = Intent.createChooser(getIntent, "Select image to upload");
    //        chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] {pickIntent});
    //
    //        startActivityForResult(chooserIntent, PICK_IMAGE);
    //    }

        @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (requestCode == GALLERY_INTENT && resultCode== RESULT_OK ){
                Uri uri = data.getData();

    //            selectedImage = storageReference.child("profile").child(uri.getd);
                selectedImage = uri;

                Bitmap bitmap = null;
                try {
                    bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(),uri);
                    img_user_profile_pic.setImageBitmap(bitmap);
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
        }
        private boolean isReadStorageAllowed() {
            //Getting the permission status
            int result = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE);

            //If permission is granted returning true
            if (result == PackageManager.PERMISSION_GRANTED)
                return true;

            //If permission is not granted returning false
            return false;
        }
        private void requestStoragePermission(){

            if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(),Manifest.permission.READ_EXTERNAL_STORAGE)){
                //If the user has denied the permission previously your code will come to this block
                //Here you can explain why you need this permission
                //Explain here why you need this permission
            }

            //And finally ask for the permission
            ActivityCompat.requestPermissions(getActivity(),new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},STORAGE_PERMISSION_CODE);
        }

        @Override
        public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {

            //Checking the request code of our request
            if(requestCode == STORAGE_PERMISSION_CODE){

                //If permission is granted
                if(grantResults.length >0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){

                    //Displaying a toast
                    //Toast.makeText(this,"Permission granted now you can read the storage",Toast.LENGTH_LONG).show();
                }else{
                    //Displaying another toast if permission is not granted
                    //CustomDialogClass.showAlert(CreateActivity.this,"Oops you just denied the permission\n Allow permission to upload pics");
                    Toast.makeText(getActivity(), "Allow storage permission to upload image", Toast.LENGTH_SHORT).show();
                }
            }
        }

    }

below image of database

W/System.err: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
03-25 03:06:50.762 10269-10269/com.lukaut.android W/System.err:     at com.lukaut.android.fragments.EditProfileFragment$2.onSuccess(EditProfileFragment.java:132)
03-25 03:06:50.762 10269-10269/com.lukaut.android W/System.err:     at com.lukaut.android.fragments.EditProfileFragment$2.onSuccess(EditProfileFragment.java:114)
03-25 03:06:50.762 10269-10269/com.lukaut.android W/System.err:     at com.google.android.gms.tasks.zzj.run(Unknown Source)
03-25 03:06:50.762 10269-10269/com.lukaut.android W/System.err:     at android.os.Handler.handleCallback(Handler.java:751)
03-25 03:06:50.762 10269-10269/com.lukaut.android W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:95)
03-25 03:06:50.762 10269-10269/com.lukaut.android W/System.err:     at android.os.Looper.loop(Looper.java:154)
03-25 03:06:50.762 10269-10269/com.lukaut.android W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:6123)
03-25 03:06:50.762 10269-10269/com.lukaut.android W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
03-25 03:06:50.762 10269-10269/com.lukaut.android W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
03-25 03:06:50.762 10269-10269/com.lukaut.android W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757)
OneCricketeer
  • 179,855
  • 19
  • 132
  • 245
  • 1
    Please show a [mcve] of the problem... Where is `onSuccess(EditProfileFragment.java:132)`? What have you done to fix the issue? – OneCricketeer Mar 24 '18 at 22:16
  • Possible duplicate of [What is a NullPointerException, and how do I fix it?](https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it) – Selvin Mar 24 '18 at 22:42

1 Answers1

2

From the stack trace it looks like your error is being thrown from:

if (!userModel.getUserProfilePic().equals("") ||!userModel.getUserProfilePic().isEmpty()){

in the first code fragment.

I would guess that your userModel is not being created from the line above in the same code fragment

UserModel userModel = documentSnapshot.toObject(UserModel.class);

You probably want to investigate why this is happening, but in the meantime you could prevent the crash by adding a null pointer check:

if ( userModel != null && (!userModel.getUserProfilePic().equals("") ||!userModel.getUserProfilePic().isEmpty())) {

The additional "userModel != null" will make sure the usermodel isn't null, the use of "&&" will then prevent the following conditions being evaluated if it is null.

This is sometimes referred to as "shortcut boolean evaluation". Once the result of a boolean expression is known, the executor (Java Virtual Machine in this case) will not bother evaluating any other parts of the expression.

Since anything "anded" with false can only ever be false (userModel != null when userModel is null will return false) the additional checks (!userModel.getUserProfilePic().equals("") ||!userModel.getUserProfilePic().isEmpty()) will not be executed, so no null pointer exception.

Sorry for the long explaination, but some newer programmers might find it interesting.

Hope this helps. CJ

C B J
  • 1,838
  • 16
  • 22