0

I making the order food app .in this when i click on order activiy app crashes and gives three error in OrderStatus.java below is logcat and OrderStatus actitvity.the order status need to get displayed after clicking the icon.

Logcat Error

    java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.hashCode()' on a null object reference
        at com.example.sharma.digimenuserver.Common.Common.convertCodeToStatus(Common.java:16)
        at com.example.sharma.digimenuserver.OrderStatus$1.onBindViewHolder(OrderStatus.java:78)
        at com.example.sharma.digimenuserver.OrderStatus$1.onBindViewHolder(OrderStatus.java:64)
        at com.firebase.ui.database.FirebaseRecyclerAdapter.onBindViewHolder(FirebaseRecyclerAdapter.java:122)
        at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6673)
        at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6714)
        at android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5647)
        at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5913)
        at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5752)
        at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5748)
        at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2232)
        at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1559)
        at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1519)
        at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:614)
        at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3812)
        at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3529)
        at android.support.v7.widget.RecyclerView.consumePendingUpdateOperations(RecyclerView.java:1767)
        at android.support.v7.widget.RecyclerView$1.run(RecyclerView.java:356)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
        at android.view.Choreographer.doCallbacks(Choreographer.java:580)
        at android.view.Choreographer.doFrame(Choreographer.java:549)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5292)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)
07-22 17:30:08.181 3099-3109/com.example.sharma.digimenuserver I/art: Debugger is no longer active
07-22 17:34:22.748 3099-3141/com.example.sharma.digimenuserver I/FirebaseAuth: [FirebaseAuth:] Loading module via 

OrderStatus.java

public class OrderStatus extends AppCompatActivity {

RecyclerView recyclerView;
RecyclerView.LayoutManager layoutManager;

FirebaseRecyclerAdapter<Request,OrderViewHolder> adapter;

FirebaseDatabase db;
DatabaseReference requests;

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

    db = FirebaseDatabase.getInstance();
    requests=db.getReference("Requests");

    recyclerView = (RecyclerView)findViewById(R.id.listOrders);
    recyclerView.setHasFixedSize(true);
    layoutManager = new LinearLayoutManager(this);
    recyclerView.setLayoutManager(layoutManager);



        loadOrders();

}

private void loadOrders() {


    FirebaseRecyclerOptions<Request> options =
            new FirebaseRecyclerOptions.Builder<Request>()
           .setQuery(requests, Request.class).build();

    adapter = new FirebaseRecyclerAdapter<Request, OrderViewHolder>(options) {
        @NonNull
        @Override
        public OrderViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

            View view = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.order_layout, parent, false);
            return new OrderViewHolder(view);
        }

        @Override
        protected void onBindViewHolder(@NonNull OrderViewHolder holder, int position, @NonNull Request model) {
            //do binding stuff
            holder.txtOrderId.setText(adapter.getRef(position).getKey());
            holder.txtOrderStatus.setText(Common.convertCodeToStatus(model.getStatus()));
            holder.txtOrderAddress.setText(model.getAddress());
            holder.txtOrderPhone.setText(model.getPhone());
            holder.setItemClickListener(new ItemClickListener() {
                @Override
                public void onClick(View view, int position, boolean isLongClick) {

                }
            });
        }
    };
    adapter.notifyDataSetChanged();

    recyclerView.setAdapter(adapter);

    adapter.startListening();

}

@Override
public boolean onContextItemSelected(MenuItem item) {

    if(item.getTitle().equals(Common.UPDATE))
        showUpdateDialog(adapter.getRef(item.getOrder()).getKey(),adapter.getItem(item.getOrder()));
    else  if(item.getTitle().equals(Common.DELETE))
        deleteOrder(adapter.getRef(item.getOrder()).getKey());


    return super.onContextItemSelected(item);
}

private void deleteOrder(String key) {
    requests.child(key).removeValue();

}

private void showUpdateDialog(String key, final Request item) {

    final AlertDialog.Builder alertDialog = new AlertDialog.Builder(OrderStatus.this);
    alertDialog.setTitle("Update Order");
    alertDialog.setMessage("Please Choose Status");

    LayoutInflater inflater = this.getLayoutInflater();
    final View view = inflater.inflate(R.layout.update_order_layout,null);

    spinnner = (MaterialSpinner)findViewById(R.id.statusSpinner);
    spinnner.setItems("Placed","On my way","Shipped");
    alertDialog.setView(view);

    final String localKey = key;
    alertDialog.setPositiveButton("YES", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {

            dialog.dismiss();
            item.setStatus(String.valueOf(spinnner.getSelectedIndex()));
            requests.child(localKey).setValue(item);
        }
    });

    alertDialog.setNegativeButton("NO", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.dismiss();
        }
    });

    alertDialog.show();



}

}

**getting the error in three lines **

        switch (code) {
            case "0":
                return "Placed";
            case "1":
                return "On my way";
            default:
                return "Shipped";
        }

     holder.txtOrderStatus.setText(Common.convertCodeToStatus(model.getStatus()));
 adapter = new FirebaseRecyclerAdapter<Request, OrderViewHolder>(options) {



https://send.firefox.com/download/80a23ccfae/#W_ricyMLLaYtPkPg_UGNFA
Isha Singh
  • 15
  • 6
  • The problem happens on line 16 of your `Common.java`, which you didn't share. As others have answered, you're calling `hashCode` there on an object that is `null`. See the question I linked for how to further troubleshoot. – Frank van Puffelen Jul 22 '18 at 13:45

2 Answers2

1

You aren't mentioning which line , but my best guess is code is null probably check for that. Java uses both .equals() and .hashCode() to validate strings in switch statement , so if code is null you will get this error

1

The error occurs in the "convertCodeToStatus()" procedure, so I think that your "model.getStatus()" is returning NULL.

emandt
  • 2,547
  • 2
  • 16
  • 20