空对象引用Android项目



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

类别活动.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();
}
}
}

错误

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

正如日志所说:

FoodActivity.java具有称为"R.layout.activity_grocery"的布局;foodCartImageView";

检查布局中是否有此图像视图。

最新更新