My app crashes whenever I clicked on the sign in button. Here is the logcat:
08-05 14:58:44.058 2283-2283/com.finalyearproject.vimelraj.qfoody E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.finalyearproject.vimelraj.qfoody, PID: 2283
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.finalyearproject.vimelraj.qfoody/com.finalyearproject.vimelraj.qfoody.Home}: java.lang.NullPointerException: Can't pass null for argument 'pathString' in child()
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Caused by: java.lang.NullPointerException: Can't pass null for argument 'pathString' in child()
at com.google.firebase.database.DatabaseReference.child(Unknown Source)
at com.finalyearproject.vimelraj.qfoody.Home.updateToken(Home.java:270)
at com.finalyearproject.vimelraj.qfoody.Home.onCreate(Home.java:189)
at android.app.Activity.performCreate(Activity.java:6679)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
This is the source code:
FirebaseDatabase database;
DatabaseReference category;
TextView txtFullName;
RecyclerView recycler_menu;
RecyclerView.LayoutManager layoutManager;
FirebaseRecyclerAdapter<Category,MenuViewHolder> adapter;
SwipeRefreshLayout swipeRefreshLayout;
CounterFab fab;
//Slider
HashMap<String,String> image_list;
SliderLayout mSlider;
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
CalligraphyConfig.initDefault(new CalligraphyConfig.Builder()
.setDefaultFontPath("fonts/restaurant_font.otf")
.setFontAttrId(R.attr.fontPath)
.build());
setContentView(R.layout.activity_home);
Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
toolbar.setTitle("Menu");
setSupportActionBar(toolbar);
swipeRefreshLayout = (SwipeRefreshLayout)findViewById(R.id.swipe_layout);
swipeRefreshLayout.setColorSchemeResources(R.color.colorPrimary,
android.R.color.holo_green_dark,
android.R.color.holo_orange_dark,
android.R.color.holo_blue_dark
);
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
if(Common.isConnectedToInternet(getBaseContext()))
loadMenu();
else
{
Toast.makeText(getBaseContext(), "Please check your Internet Connection!!", Toast.LENGTH_SHORT).show();
return;
}
}
});
swipeRefreshLayout.post(new Runnable() {
@Override
public void run() {
if(Common.isConnectedToInternet(getBaseContext()))
loadMenu();
else
{
Toast.makeText(getBaseContext(), "Please check your Internet Connection!!", Toast.LENGTH_SHORT).show();
return;
}
}
});
//Init Firebase
database = FirebaseDatabase.getInstance();
category = database.getReference("Category");
Paper.init(this);
fab = (CounterFab) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent cartIntent = new Intent(Home.this,Cart.class);
startActivity(cartIntent);
}
});
fab.setCount(new Database(this).getCountCart(Common.currentUser.getPhone()));
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);
toggle.syncState();
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
//Set Name for user
View headerView = navigationView.getHeaderView(0);
txtFullName = (TextView)headerView.findViewById(R.id.txtFullName);
txtFullName.setText(Common.currentUser.getName());
//Load menu
recycler_menu = (RecyclerView)findViewById(R.id.recycler_menu);
recycler_menu.setLayoutManager(new GridLayoutManager(this,2));
LayoutAnimationController controller = AnimationUtils.loadLayoutAnimation(recycler_menu.getContext(),
R.anim.layout_fall_down);
recycler_menu.setLayoutAnimation(controller);
updateToken(FirebaseInstanceId.getInstance().getToken());
//Slider
setupSlider();
Intent service = new Intent(Home.this, ListenOrder.class);
startService(service);
}
private void setupSlider() {
mSlider = (SliderLayout)findViewById(R.id.slider);
image_list = new HashMap<>();
final DatabaseReference banners = database.getReference("Banner");
banners.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot postSnapShot:dataSnapshot.getChildren())
{
Banner banner = postSnapShot.getValue(Banner.class);
image_list.put(banner.getName()+"@@@"+banner.getId(),banner.getImage());
}
for(String key:image_list.keySet())
{
String[] keySplit = key.split("@@@");
String nameOfFood = keySplit[0];
String idOfFood = keySplit[1];
final TextSliderView textSliderView = new TextSliderView(getBaseContext());
textSliderView
.description(nameOfFood)
.image(image_list.get(key))
.setScaleType(BaseSliderView.ScaleType.Fit)
.setOnSliderClickListener(new BaseSliderView.OnSliderClickListener() {
@Override
public void onSliderClick(BaseSliderView slider) {
Intent intent = new Intent(Home.this,FoodDetail.class);
intent.putExtras(textSliderView.getBundle());
startActivity(intent);
}
});
textSliderView.bundle(new Bundle());
textSliderView.getBundle().putString("FoodId",idOfFood);
mSlider.addSlider(textSliderView);
banners.removeEventListener(this);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
mSlider.setPresetTransformer(SliderLayout.Transformer.Background2Foreground);
mSlider.setPresetIndicator(SliderLayout.PresetIndicators.Center_Bottom);
mSlider.setCustomAnimation(new DescriptionAnimation());
mSlider.setDuration(4000);
}
@Override
protected void onResume() {
super.onResume();
fab.setCount(new Database(this).getCountCart(Common.currentUser.getPhone()));
if(adapter != null)
adapter.startListening();
}
private void updateToken(String token) {
FirebaseDatabase db = FirebaseDatabase.getInstance();
DatabaseReference tokens = db.getReference("Tokens");
Token data = new Token(token,false);
tokens.child(Common.currentUser.getPhone()).setValue(data);
}
private void loadMenu() {
FirebaseRecyclerOptions<Category> options = new FirebaseRecyclerOptions.Builder<Category>()
.setQuery(category,Category.class)
.build();
adapter = new FirebaseRecyclerAdapter<Category, MenuViewHolder>(options) {
@Override
public MenuViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.menu_item,parent,false);
return new MenuViewHolder(itemView);
}
@Override
protected void onBindViewHolder(@NonNull MenuViewHolder viewHolder, int position, @NonNull Category model) {
viewHolder.txtMenuName.setText(model.getName());
Picasso.with(getBaseContext()).load(model.getImage())
.into(viewHolder.imageView);
final Category clickItem = model;
viewHolder.setItemClickListener(new ItemClickListener() {
@Override
public void onClick(View view, int position, boolean isLongClick) {
Intent foodList = new Intent(Home.this,FoodList.class);
foodList.putExtra("CategoryId",adapter.getRef(position).getKey());
startActivity(foodList);
}
});
}
};
adapter.startListening();
recycler_menu.setAdapter(adapter);
swipeRefreshLayout.setRefreshing(false);
//Animation
recycler_menu.getAdapter().notifyDataSetChanged();
recycler_menu.scheduleLayoutAnimation();
}
@Override
protected void onStop() {
super.onStop();
adapter.stopListening();
mSlider.stopAutoCycle();
}
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.home, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId() == R.id.menu_search)
startActivity(new Intent(Home.this,SearchActivity.class));
return super.onOptionsItemSelected(item);
}
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
if (id == R.id.nav_menu) {
} else if (id == R.id.nav_cart) {
Intent cartIntent = new Intent(Home.this,Cart.class);
startActivity(cartIntent);
} else if (id == R.id.nav_settings) {
} else if (id == R.id.nav_orders) {
Intent orderIntent = new Intent(Home.this,OrderStatus.class);
startActivity(orderIntent);
}
else if (id == R.id.nav_favorites) {
startActivity(new Intent(Home.this,FavoritesActivity.class));
}else if (id == R.id.nav_log_out) {
//Delete Remember user & password
Paper.book().destroy();
//Logout
Intent login = new Intent(Home.this,MainActivity.class);
login.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(login);
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
}