-1

MainActivity.java

EditText usernameEditText;
EditText phoneNumberEditText;
EditText emailEditText;
EditText passwordEditText;

FirebaseAuth mAuth;

DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference();

SharedPreferences sharedPreferences;

public static boolean addressAdded ;

public static String loginType;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    getSupportActionBar().hide();

    usernameEditText = findViewById(R.id.usernameEditText);
    phoneNumberEditText = findViewById(R.id.phoneNumberEditText);
    emailEditText = findViewById(R.id.emailEditText);
    passwordEditText = findViewById(R.id.passwordEditText);

    sharedPreferences = getApplicationContext().getSharedPreferences("com.example.tridevdelivs", Context.MODE_PRIVATE);
    loginType =  sharedPreferences.getString("loggedInType", "");

    ActivityCompat.requestPermissions(this,
            new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.INTERNET},
            1);



    // Initialize Firebase Auth
    mAuth = FirebaseAuth.getInstance();

    FirebaseUser user = mAuth.getCurrentUser();

    if(user != null){
        reDirect(loginType);
    }

}

@Override
public void onRequestPermissionsResult(int requestCode,
                                       String permissions[], int[] grantResults) {
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            } else {
                ActivityCompat.requestPermissions(this,
                        new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.INTERNET},
                        1);
            }
            return;
}

public void logIn(View view){
    PopUp popUp = new PopUp();
    loginType = "users";
    popUp.showPopupWindow(getApplicationContext(), view);
}

public void signUp(View view){
    if(TextUtils.isEmpty(emailEditText.getText().toString())){
        Toast.makeText(this, "Please enter your email!", Toast.LENGTH_SHORT).show();
    }else if(TextUtils.isEmpty(passwordEditText.getText().toString())){
        Toast.makeText(this, "Please enter a password!", Toast.LENGTH_SHORT).show();
    }else if(TextUtils.isEmpty(phoneNumberEditText.getText().toString())){
        Toast.makeText(this, "Please enter your phone number!", Toast.LENGTH_SHORT).show();
    }else if(TextUtils.isEmpty(usernameEditText.getText().toString())){
        Toast.makeText(this, "Please enter a username!", Toast.LENGTH_SHORT).show();
    }else {
        mAuth.createUserWithEmailAndPassword(emailEditText.getText().toString(), passwordEditText.getText().toString())
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()) {
                            // Sign in success, update UI with the signed-in user's information

                            User newUser = new User(usernameEditText.getText().toString(), emailEditText.getText().toString(), phoneNumberEditText.getText().toString(), "");

                            mDatabase.child("users").child(mAuth.getUid()).push().setValue(newUser);

                            reDirect("users");
                        } else {
                            // If sign in fails, display a message to the user.
                            Toast.makeText(MainActivity.this, "Sign up failed! Please Try again.", Toast.LENGTH_SHORT).show();
                        }
                    }
                });
    }
}

public void vendorRegistration(View view){
    final Intent intent = new Intent(getApplicationContext(), RegistrationActivity.class);

    final AlertDialog.Builder alert = new AlertDialog.Builder(this);
    LayoutInflater inflater = getLayoutInflater();

    View inflaterView = inflater.inflate(R.layout.registration_login_popup, (ViewGroup) findViewById(R.id.registerLoginCardView));

    TextView registerVendorTextView = inflaterView.findViewById(R.id.registerVendorTextView);
    TextView registerDeliveryBoyTextView = inflaterView.findViewById(R.id.registerDeliveryBoyTextView);
    TextView loginVendorTextView = inflaterView.findViewById(R.id.loginVendorTextView);
    TextView loginDeliveryBoyTextView = inflaterView.findViewById(R.id.loginDeliveryBoyTextView);

    alert.setView(inflaterView);
    alert.show();

    registerVendorTextView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            intent.putExtra("registrationType", "vendor");
            startActivity(intent);
        }
    });

    registerDeliveryBoyTextView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            intent.putExtra("registrationType", "deliveryBoy");
            startActivity(intent);
        }
    });

    loginVendorTextView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            PopUp popUp = new PopUp();
            loginType = "vendors";
            popUp.showPopupWindow(getApplicationContext(), view);
        }
    });

    loginDeliveryBoyTextView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            PopUp popUp = new PopUp();
            loginType = "deliveryBoys";
            popUp.showPopupWindow(getApplicationContext(), view);
        }
    });
}

public void reDirect(String loggedInType){
    Intent intent = new Intent(getApplicationContext(), CategoryActivity.class);
    intent.putExtra("loggedInType", loggedInType);
    startActivity(intent);
}

CategoryActivity.java

TextView titleTextView;

ImageView categoryCartImageView;

FirebaseAuth mAuth = FirebaseAuth.getInstance();

FirebaseDatabase database = FirebaseDatabase.getInstance();

SharedPreferences sharedPreferences;

String userType;
String username;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_category);

    getSupportActionBar().hide();

    titleTextView = findViewById(R.id.titleTextView);

    categoryCartImageView = findViewById(R.id.categoryCartImageView);

    sharedPreferences = getApplicationContext().getSharedPreferences("com.example.tridevdelivs", Context.MODE_PRIVATE);
    boolean cartActive = sharedPreferences.getBoolean("cartActive", false);

    Intent intent = getIntent();

    userType = intent.getStringExtra("loggedInType");
    if(userType != null) {
        sharedPreferences.edit().putString("loggedInType", userType).apply();
    }

    categoryCartImageView.bringToFront();
    categoryCartImageView.setClickable(true);
    if(cartActive){
        categoryCartImageView.setVisibility(View.VISIBLE);
    }
    categoryCartImageView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(getApplicationContext(), CartActivity.class);
            startActivity(intent);
        }
    });

    if(userType == null){
        userType = sharedPreferences.getString("loggedInType", "");
    }

    if(userType.equals("users")){
        setUsername();
    }else if(userType.equals("vendors")){
        setVendorName();
    }else if(userType.equals("deliveryBoys")){
        setDeliveryBoyName();
    }


}

public void groceryClicked(View view){
    Intent intent = new Intent(getApplicationContext(), GroceryActivity.class);

    startActivity(intent);
}

public void foodClicked(View view){
    Intent intent = new Intent(getApplicationContext(), FoodActivity.class);

    startActivity(intent);
}

public void beautyClicked(View view){
    Intent intent1 = new Intent(getApplicationContext(), FoodActivity.class);

    startActivity(intent1);
}

public void setUsername(){
    final DatabaseReference myRef = database.getReference().child("users").child(Objects.requireNonNull(mAuth.getCurrentUser().getUid()));

    myRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            for (DataSnapshot childSnapshot: snapshot.getChildren()) {
                User user = childSnapshot.getValue(User.class);
                username = "Welcome " + user.getUsername() + "!";
                titleTextView.setText(username);
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {

        }
    });
}

public void setVendorName(){
    final DatabaseReference myRef = database.getReference().child("vendors").child(Objects.requireNonNull(mAuth.getCurrentUser().getUid()));

    myRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            for (DataSnapshot childSnapshot: snapshot.getChildren()) {
                User user = childSnapshot.getValue(User.class);
                username = "Welcome " + user.getUsername() + "!";
                titleTextView.setText(username);
                sharedPreferences.edit().putString("vendorName", user.getUsername()).apply();
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {

        }
    });
}

public void setDeliveryBoyName(){
    final DatabaseReference myRef = database.getReference().child("deliveryBoys").child(Objects.requireNonNull(mAuth.getCurrentUser().getUid()));

    myRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            for (DataSnapshot childSnapshot: snapshot.getChildren()) {
                User user = childSnapshot.getValue(User.class);
                username = "Welcome " + user.getUsername() + "!";
                titleTextView.setText(username);
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {

        }
    });
}

public void userProfile(View view){
    Intent intent = new Intent(getApplicationContext(), ProfileActivity.class);
    startActivity(intent);
}

FoodActivity.java

public static CoordinatorLayout foodCoordinatorLayout;

RecyclerView foodRecyclerView;

SearchView foodSearchView;

FoodAdapter foodAdapter;

EditText quantityEditText;

public static ImageView foodCartImageView;

FirebaseDatabase database = FirebaseDatabase.getInstance();

ArrayList<ListItem> listItems = new ArrayList<>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_grocery);

    getSupportActionBar().hide();

    foodCoordinatorLayout = findViewById(R.id.foodCoordinatorLayout);

    foodRecyclerView = findViewById(R.id.foodRecyclerView);

    foodCartImageView = findViewById(R.id.foodCartImageView);

    foodSearchView = findViewById(R.id.foodSearchView);

    quantityEditText = findViewById(R.id.quantityEditText);

    SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences("com.example.tridevdelivs", Context.MODE_PRIVATE);
    boolean cartActive = sharedPreferences.getBoolean("cartActive", false);

    foodCartImageView.bringToFront();
    foodCartImageView.setClickable(true);
    if (cartActive) {
        foodCartImageView.setVisibility(View.VISIBLE);
    }
    foodCartImageView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(getApplicationContext(), CartActivity.class);
            startActivity(intent);
        }
    });

    RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
    foodRecyclerView.setLayoutManager(mLayoutManager);
    foodRecyclerView.setItemAnimator(new DefaultItemAnimator());

    setArrayLists();

    setAdapter();

    foodSearchView.setImeOptions(EditorInfo.IME_ACTION_DONE);

    foodSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String s) {
            return false;
        }

        @Override
        public boolean onQueryTextChange(String s) {
            foodAdapter.getFilter().filter(s);
            return false;
        }
    });

}

public void setArrayLists() {
    final DatabaseReference myRef = database.getReference().child("items").child("Food");

    myRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            for (DataSnapshot childSnapshot : snapshot.getChildren()) {
                Item item = childSnapshot.getValue(Item.class);

                listItems.add(new ListItem(item.getImageUrl(), item.getItemName(), item.getPrice(), item.getQuantityType()));

                if (snapshot.getChildrenCount() == listItems.size()) {
                    setAdapter();
                }

            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {

        }
    });
}

public void setAdapter() {
    foodAdapter = new FoodAdapter(getApplicationContext(), listItems);
    foodRecyclerView.setAdapter(foodAdapter);
    foodRecyclerView.addItemDecoration(new DividerItemDecoration(foodRecyclerView.getContext(), DividerItemDecoration.VERTICAL));
}

public void addItem(View view) {
    Intent intent = new Intent(getApplicationContext(), AddItemActivity.class);
    startActivity(intent);
}

FoodAdapter.java

Context context;

boolean cartActive = false ;

ArrayList<String> titles = new ArrayList<>();
ArrayList<String> prices = new ArrayList<>();
ArrayList<String> quantities = new ArrayList<>();
ArrayList<String> quantityTypes = new ArrayList<>();
ArrayList<String> imageUrls = new ArrayList<>();

ArrayList<ListItem> listItems;
ArrayList<ListItem> listItemsFull;

public class MyViewHolder extends RecyclerView.ViewHolder{
    public TextView title;
    public TextView priceTextView;
    public ImageView imageView;
    public Button addtocartButton;
    public EditText quantityEditText;
    public TextView quantitytypeTextView;
    public MyViewHolder(View view) {
        super(view);
        title = view.findViewById(R.id.title);
        priceTextView = view.findViewById(R.id.priceTextView);
        imageView = view.findViewById(R.id.imageView);
        addtocartButton = view.findViewById(R.id.addtocartButton);
        quantityEditText = view.findViewById(R.id.quantityEditText);
        quantitytypeTextView = view.findViewById(R.id.quantitytypeTextView);
    }
}

public FoodAdapter(Context context, ArrayList<ListItem> listItems) {
    this.listItems = listItems;
    this.context = context;
    listItemsFull = new ArrayList<>(listItems);
}

@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    View itemView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_row, viewGroup, false);
    return new FoodAdapter.MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(@NonNull final MyViewHolder myViewHolder, final int i) {
    final ListItem currentItem = listItems.get(i);

    String price = "₹" + currentItem.getPrice();
    Bitmap myImage = null;

    DownloadImage imageTask = new DownloadImage();
    try {
        myImage = imageTask.execute(currentItem.getImageUrl()).get();
    } catch (Exception e) {
        e.printStackTrace();
    }


    myViewHolder.title.setText(currentItem.getTitle());
    myViewHolder.priceTextView.setText(price);
    myViewHolder.quantitytypeTextView.setText("/" + currentItem.getQuantityType());
    myViewHolder.imageView.setImageBitmap(myImage);
    myViewHolder.addtocartButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if(!myViewHolder.quantityEditText.getText().toString().equals("")) {
                Toast.makeText(context, "Added To cart!", Toast.LENGTH_SHORT).show();
                foodCartImageView.setVisibility(View.VISIBLE);
                cartActive = true;

                InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(FoodActivity.foodCoordinatorLayout.getWindowToken(), 0);

                saving(currentItem.getTitle(), currentItem.getImageUrl(), currentItem.getPrice(), myViewHolder.quantityEditText.getText().toString(), currentItem.getQuantityType(), cartActive);
            }else{
                Toast.makeText(context, "Please put quantity!", Toast.LENGTH_SHORT).show();
            }
        }
    });
}
@Override
public int getItemCount() {
    return listItems.size();
}

@Override
public Filter getFilter() {
    return exampleFilter;
}

private Filter exampleFilter = new Filter() {
    @Override
    protected FilterResults performFiltering(CharSequence constraint) {
        ArrayList<ListItem> filteredList = new ArrayList<>();

        if (constraint == null || constraint.length() == 0) {
            filteredList.addAll(listItemsFull);
        } else {
            String filterPattern = constraint.toString().toLowerCase().trim();

            for (ListItem item : listItemsFull) {
                if (item.getTitle().toLowerCase().contains(filterPattern)) {
                    filteredList.add(item);
                }
            }
        }
        FilterResults results = new FilterResults();
        results.values = filteredList;
        return results;
    }
    @Override
    protected void publishResults(CharSequence constraint, FilterResults results) {
        listItems.clear();
        listItems.addAll((ArrayList<ListItem>) results.values);
        notifyDataSetChanged();
    }
};

public class DownloadImage extends AsyncTask<String, Void, Bitmap> {

    @Override
    protected Bitmap doInBackground(String... urls) {
        try {

            URL url = new URL(urls[0]);
            HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
            httpURLConnection.connect();
            InputStream inputStream = httpURLConnection.getInputStream();
            Bitmap myBitMap = BitmapFactory.decodeStream(inputStream);

            return myBitMap;

        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

public void saving(String title, String image, String price, String quantity, String quantityType, boolean cartActive){
    SharedPreferences sharedPreferences = context.getApplicationContext().getSharedPreferences("com.example.tridevdelivs", Context.MODE_PRIVATE);

    ArrayList<String> arrayList = new ArrayList<>();

    ArrayList<String> titles1;
    ArrayList<String> imageUrls1;
    ArrayList<String> prices1;
    ArrayList<String> quantities1;
    ArrayList<String> quantityTypes1;

    titles.add(title);
    imageUrls.add(image);
    prices.add(price);
    quantities.add(quantity);
    quantityTypes.add(quantityType);

    try {
        arrayList = (ArrayList<String>) ObjectSerializer.deserialize(sharedPreferences.getString("titlesFood", ObjectSerializer.serialize(new ArrayList<String>())));
    }catch (Exception e){
        e.printStackTrace();
    }

    if(arrayList.size()>0) {
        try {
            titles1 = (ArrayList<String>) ObjectSerializer.deserialize(sharedPreferences.getString("titlesFood", ObjectSerializer.serialize(new ArrayList<String>())));
            imageUrls1 = (ArrayList<String>) ObjectSerializer.deserialize(sharedPreferences.getString("imageUrlsFood", ObjectSerializer.serialize(new ArrayList<String>())));
            prices1 = (ArrayList<String>) ObjectSerializer.deserialize(sharedPreferences.getString("pricesFood", ObjectSerializer.serialize(new ArrayList<String>())));
            quantities1 = (ArrayList<String>) ObjectSerializer.deserialize(sharedPreferences.getString("quantitiesFood", ObjectSerializer.serialize(new ArrayList<String>())));
            quantityTypes1 = (ArrayList<String>) ObjectSerializer.deserialize(sharedPreferences.getString("quantityTypesFood", ObjectSerializer.serialize(new ArrayList<String>())));

            titles1.add(title);
            imageUrls1.add(image);
            prices1.add(price);
            quantities1.add(quantity);
            quantityTypes1.add(quantityType);

            SharedPreferences.Editor editor = sharedPreferences.edit();
            editor.remove("titlesFood");
            editor.remove("imagesFood");
            editor.remove("pricesFood");
            editor.remove("quantitiesFood");
            editor.remove("quantityTypesFood");
            editor.apply();

            sharedPreferences.edit().putString("titlesFood", ObjectSerializer.serialize(titles1)).apply();
            sharedPreferences.edit().putString("imageUrlsFood", ObjectSerializer.serialize(imageUrls1)).apply();
            sharedPreferences.edit().putString("pricesFood", ObjectSerializer.serialize(prices1)).apply();
            sharedPreferences.edit().putString("quantitiesFood", ObjectSerializer.serialize(quantities1)).apply();
            sharedPreferences.edit().putString("quantityTypesFood", ObjectSerializer.serialize(quantityTypes1)).apply();
        }catch (Exception e){
            e.printStackTrace();
        }
    }else {
        try {
            sharedPreferences.edit().putString("titlesFood", ObjectSerializer.serialize(titles)).apply();
            sharedPreferences.edit().putString("imageUrlsFood", ObjectSerializer.serialize(imageUrls)).apply();
            sharedPreferences.edit().putString("pricesFood", ObjectSerializer.serialize(prices)).apply();
            sharedPreferences.edit().putString("quantitiesFood", ObjectSerializer.serialize(quantities)).apply();
            sharedPreferences.edit().putString("quantityTypesFood", ObjectSerializer.serialize(quantityTypes)).apply();
            sharedPreferences.edit().putBoolean("cartActive", cartActive).apply();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Errors

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.tridevdelivs, PID: 8350
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.tridevdelivs/com.example.tridevdelivs.FoodActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.bringToFront()' on a null object reference
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3449)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
        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:2066)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7656)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.bringToFront()' on a null object reference
        at com.example.tridevdelivs.FoodActivity.onCreate(FoodActivity.java:68)
        at android.app.Activity.performCreate(Activity.java:8000)
        at android.app.Activity.performCreate(Activity.java:7984)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422
Ismail
  • 2,322
  • 1
  • 12
  • 26
sonujb
  • 1
  • 1
  • 2
    Does this answer your question? [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) – Oozeerally Oct 09 '20 at 15:47
  • Not it doesn't. But thanks! – sonujb Oct 10 '20 at 04:53

1 Answers1

0

As the logs says :

FoodActivity.java has layout called "R.layout.activity_grocery" , which doesn't include "foodCartImageView" in it.

check if you have this image view inside layout or not.

NehaK
  • 2,639
  • 1
  • 15
  • 31