I am making an food ordering app, just recently download the source code from https://github.com/G-Maniteja/Android-PHP-MySQL-BootStrap-FoodOrder. I have fix few errors that i have but now i am stuck at this part. Can someone please tell me how to fix it?
The error
    java.lang.NullPointerException: Attempt to invoke virtual method 'int org.json.JSONArray.length()' on a null object reference
        at com.example.manitejagande.foodorder.MenuItemDataModel.fromJson(MenuItemDataModel.java:29)
The full error
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.manitejagande.foodorder, PID: 15899
    java.lang.NullPointerException: Attempt to invoke virtual method 'int org.json.JSONArray.length()' on a null object reference
        at com.example.manitejagande.foodorder.MenuItemDataModel.fromJson(MenuItemDataModel.java:29)
        at com.example.manitejagande.foodorder.CartActivity$AsyncGet1.onPostExecute(CartActivity.java:387)
        at com.example.manitejagande.foodorder.CartActivity$AsyncGet1.onPostExecute(CartActivity.java:304)
        at android.os.AsyncTask.finish(AsyncTask.java:667)
        at android.os.AsyncTask.-wrap1(AsyncTask.java)
        at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:684)
        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)
MenuItemDataModel.Java
package com.example.manitejagande.foodorder;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
public class MenuItemDataModel {
    public String itemname;
    public String itemprice;
`
    public MenuItemDataModel(JSONObject object) {
        try
        {
            this.itemname = object.getString("itemname");
            this.itemprice = object.getString("itemprice");
        }
        catch (JSONException e)
        {
            e.printStackTrace();
        }
    }
    //itemname and itemprice values retrieval from JSON Array..
    public static ArrayList<MenuItemDataModel> fromJson(JSONArray jsonObjects)
    {
        ArrayList<MenuItemDataModel> menuitems = new ArrayList<MenuItemDataModel>();
        for (int i = 0; i < jsonObjects.length(); i++) //ERROR this line
        {
            try
            {
                menuitems.add(new MenuItemDataModel(jsonObjects.getJSONObject(i)));
            }
            catch (JSONException e)
            {
                e.printStackTrace();
            }
        }
        return menuitems;
    }
}
There is also an Adapter MenuItemAdapter.java
package com.example.manitejagande.foodorder;
import android.content.Context;
import android.content.SharedPreferences;
import android.net.Uri;
import android.preference.PreferenceManager;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.view.LayoutInflater;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
public class MenuItemAdapter extends RecyclerView.Adapter<MenuItemAdapter.MenuItemViewHolder>
{
    Context context;
    ArrayList<MenuItemDataModel> data;
    public MenuItemAdapter(Context context,ArrayList<MenuItemDataModel> data) {
        this.data = data;
        this.context=context;
    }
    @NonNull
    @Override
    public MenuItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.menu_list_item, parent, false);
        MenuItemViewHolder myViewHolder = new MenuItemViewHolder(view);
        return myViewHolder;
    }
    public String getDefaults(String key, Context context) {
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
        return preferences.getString(key, null);
    }
    @Override
    public void onBindViewHolder(@NonNull MenuItemViewHolder holder, int position) {
        TextView itemname=holder.itemname;
        TextView itemprice=holder.itemprice;
        Button additem=holder.additem;
        final Button qsub=holder.qsub;
        final TextView qty=holder.qty;
        Button qadd=holder.qadd;
        final String name=data.get(position).itemname.toString();
        final String price=data.get(position).itemprice.toString();
        itemname.setText(name);
        itemprice.setText(price);
        qty.setText("0");
        qsub.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(qty.getText().toString().equals("0"))
                {
                    //Log.i("qwer123456","12345"+qty.getText().toString());
                    Toast.makeText(qsub.getContext(), "Cannot decrease the Quantity..",Toast.LENGTH_SHORT).show();
                }
                else
                {
                    int qty1=Integer.parseInt(qty.getText().toString());
                    qty1--;
                    qty.setText(Integer.toString(qty1));
                }
            }
        });
        qadd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int qty1=Integer.parseInt(qty.getText().toString());
                qty1++;
                qty.setText(Integer.toString(qty1));
            }
        });
        additem.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //String url="https://inamtginamtg.000webhostapp.com/cart.php";
                if(qty.getText().toString().equals("0"))
                {
                    Toast.makeText(context,"Please add Quantity of the Item..",Toast.LENGTH_SHORT).show();
                }
                else {
                    String url = LoginActivity.weburl + "cart.php";
                    String email = getDefaults("userid", context);
                    Uri.Builder builder = new Uri.Builder()
                            .appendQueryParameter("email", email)
                            .appendQueryParameter("itemname", name)
                            .appendQueryParameter("itemprice", price)
                            .appendQueryParameter("qty",qty.getText().toString());
                    String query = builder.build().getEncodedQuery();
                    Log.i("url", query);
                    Toast.makeText(context, "Item Added Successfully..!", Toast.LENGTH_SHORT).show();
                    Async_Task a = new Async_Task(context, url, query, true);
                    a.execute();
                    Toast.makeText(context, "Item added to Cart", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
    @Override
    public int getItemCount() {
        return data.size();
    }
    public static class MenuItemViewHolder extends RecyclerView.ViewHolder
    {
        TextView itemname;
        TextView itemprice;
        Button additem;
        Button qsub;
        Button qadd;
        TextView qty;
        public MenuItemViewHolder(View itemView) {
            super(itemView);
            this.itemname=(TextView)itemView.findViewById(R.id.itemname);
            this.itemprice=(TextView)itemView.findViewById(R.id.itemprice);
            this.additem=(Button)itemView.findViewById(R.id.additem);
            this.qsub=(Button)itemView.findViewById(R.id.qsub);
            this.qty=(TextView)itemView.findViewById(R.id.qty);
            this.qadd=(Button)itemView.findViewById(R.id.qadd);
        }
    }
}
CartActivity.Java
package com.example.manitejagande.foodorder;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.AsyncTask;
import android.preference.PreferenceManager;
import android.support.annotation.NonNull;
import android.support.design.widget.BottomSheetBehavior;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import org.json.JSONArray;
import org.json.JSONException;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import static com.example.manitejagande.foodorder.CartActivity.CONNECTION_TIMEOUT;
import static com.example.manitejagande.foodorder.CartActivity.READ_TIMEOUT;
public class CartActivity extends AppCompatActivity {
    public static final int CONNECTION_TIMEOUT=10000;
    public static final int READ_TIMEOUT=15000;
    Context context=this;
    String response;
    ListView listView;
    String email;
    String oids;
    int total=0;
    private static RecyclerView.Adapter adapter;
    private static RecyclerView.Adapter adapter1;
    private RecyclerView.LayoutManager layoutManager;
    private RecyclerView.LayoutManager layoutManager1;
    private static RecyclerView recyclerView;
    private static RecyclerView recyclerView1;
    Button placeorder;
    static TextView total_text;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_cart);
        email=getDefaults("userid",this);
        total_text=(TextView)findViewById(R.id.totalprice);
        recyclerView = (RecyclerView) findViewById(R.id.recyclercart);
        recyclerView.setHasFixedSize(true);
        layoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setItemAnimator(new DefaultItemAnimator());
        placeorder=(Button)findViewById(R.id.placeorder);
        recyclerView1 = (RecyclerView) findViewById(R.id.cart_suggestion_recycler);
        recyclerView1.setHasFixedSize(true);
        layoutManager1 = new LinearLayoutManager(this);
        recyclerView1.setLayoutManager(layoutManager1);
        recyclerView1.setItemAnimator(new DefaultItemAnimator());
        //  String url="http://192.168.0.2/foodorder/showcart.php?email="+email;
        FloatingActionButton ca_fab=(FloatingActionButton)findViewById(R.id.ca_fab);
        ca_fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent i=new Intent(CartActivity.this,MainActivity.class);
                startActivity(i);
            }
        });
        AsyncGet a=new AsyncGet();
        a.execute();
    }
    public static String getDefaults(String key, Context context) {
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
        return preferences.getString(key, null);
    }
    public class AsyncGet extends AsyncTask<String, String, String>
    {
        ProgressDialog pdLoading = new ProgressDialog(CartActivity.this);
        HttpURLConnection conn;
        URL url = null;
        String results="";
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            //this method will be running on UI thread
            pdLoading.setMessage("\tLoading...");
            pdLoading.setCancelable(false);
            pdLoading.show();
        }
        @Override
        protected String doInBackground(String... params) {
            try {
                // Enter URL address where your php file resides
                // url = new URL("https://inamtginamtg.000webhostapp.com/showcart.php?email="+email);
                url = new URL(LoginActivity.weburl+"showcart.php?email="+email);
                Log.i("url1",url.toString());
            } catch (MalformedURLException e) {
                e.printStackTrace();
                return "exception";
            }
            try {
                // Setup HttpURLConnection class to send and receive data from php and mysql
                conn = (HttpURLConnection)url.openConnection();
                conn.setReadTimeout(READ_TIMEOUT);
                conn.setConnectTimeout(CONNECTION_TIMEOUT);
                conn.setRequestMethod("GET");
                // setDoInput and setDoOutput method depict handling of both send and receive
                conn.setDoInput(true);
                conn.setDoOutput(true);
                // Append parameters to URL
                //Uri.Builder builder = new Uri.Builder();
                //String query = builder.build().getEncodedQuery();
                Log.i("url2",url.toString());
                // Open connection for sending data
                OutputStream os = conn.getOutputStream();
                BufferedWriter writer = new BufferedWriter(
                        new OutputStreamWriter(os, "UTF-8"));
                //               writer.write(query);
                writer.write(url.toString());
                writer.flush();
                writer.close();
                os.close();
                conn.connect();
            } catch (IOException e1) {
                e1.printStackTrace();
                return "exception";
            }
            try {
                int response_code = conn.getResponseCode();
                // Check if successful connection made
                //if (response_code == HttpURLConnection.HTTP_OK) {
                // Read data sent from server
                InputStream input = conn.getInputStream();
                BufferedReader reader = new BufferedReader(new InputStreamReader(input));
                StringBuilder result = new StringBuilder();
                String line;
                while ((line = reader.readLine()) != null) {
                    result.append(line);
                }
                results=result.toString();
                response=results;
                Log.i("result",results);
                // Pass data to onPostExecute method
                return(result.toString());
//            }else{
//
//                return("unsuccessful");
//            }
            } catch (IOException e) {
                e.printStackTrace();
                return "exception";
            } finally {
                conn.disconnect();
            }
        }
        @Override
        protected void onPostExecute(String result) {
            //this method will be running on UI thread
            pdLoading.dismiss();
            JSONArray jsonArray = null;
            try {
                jsonArray = new JSONArray(response);
            } catch (JSONException e) {
                e.printStackTrace();
            }
            ArrayList<CartItemDataModel> itemslist = CartItemDataModel.fromJson(jsonArray);
            //CartAdapter adapter = new CartAdapter(CartActivity.this, itemslist);
            //adapter.addAll(itemslist);
            //listView.setAdapter(adapter);
            adapter=new CartItemAdapter(context,itemslist);
            recyclerView.setAdapter(adapter);
            //total=((CartItemAdapter) adapter).getTotal();
            if(result!=null)
            {
                Toast.makeText(CartActivity.this, "Items Fetched successfully", Toast.LENGTH_LONG).show();
            }else{
                // If username and password does not match display a error message
                Toast.makeText(CartActivity.this, "Fetch Failed.", Toast.LENGTH_LONG).show();
            }
            total=((CartItemAdapter)adapter).grandTotal(itemslist);
            CartActivity.total_text.setText(String.valueOf(total));
            oids=((CartItemAdapter)adapter).return_oids();
            placeorder.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //String url="https://inamtginamtg.000webhostapp.com/currentorders.php";
                    String url=LoginActivity.weburl+"currentorders.php";
                    Uri.Builder builder = new Uri.Builder()
                            .appendQueryParameter("oids", oids);
                    String query = builder.build().getEncodedQuery();
                    Log.i("items to current orders",query);
                    //Toast.makeText(context,"Item removed Successfully..!",Toast.LENGTH_SHORT);
                    Async_Task a=new Async_Task(context,url,query,true);
                    a.execute();
                    String r=a.getResult();
                    Intent i=new Intent(context,CurrentOrder.class);
                    startActivity(i);
                }
            });
            AsyncGet1 a1=new AsyncGet1();
            a1.execute();
        }
        String getjsonString()
        {
            return results;
        }
    }
    public class AsyncGet1 extends AsyncTask<String, String, String> //ERROR Here
    {
        ProgressDialog pdLoading = new ProgressDialog(CartActivity.this);
        HttpURLConnection conn;
        URL url = null;
        String results="";
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pdLoading.setMessage("\tLoading...");
            pdLoading.setCancelable(false);
            pdLoading.show();
        }
        @Override
        protected String doInBackground(String... params) {
            try {
                // url = new URL("https://inamtginamtg.000webhostapp.com/showcart.php?email="+email);
                url = new URL(LoginActivity.weburl+"cartsuggestions.php?email="+email);
                Log.i("url1",url.toString());
            } catch (MalformedURLException e) {
                e.printStackTrace();
                return "exception";
            }
            try {
                conn = (HttpURLConnection)url.openConnection();
                conn.setReadTimeout(READ_TIMEOUT);
                conn.setConnectTimeout(CONNECTION_TIMEOUT);
                conn.setRequestMethod("GET");
                conn.setDoInput(true);
                conn.setDoOutput(true);
                Log.i("url2",url.toString());
                OutputStream os = conn.getOutputStream();
                BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
                writer.write(url.toString());
                writer.flush();
                writer.close();
                os.close();
                conn.connect();
            } catch (IOException e1) {
                e1.printStackTrace();
                return "exception";
            }
            try {
                int response_code = conn.getResponseCode();
                InputStream input = conn.getInputStream();
                BufferedReader reader = new BufferedReader(new InputStreamReader(input));
                StringBuilder result = new StringBuilder();
                String line;
                while ((line = reader.readLine()) != null) {
                    result.append(line);
                }
                results=result.toString();
                response=results;
                Log.i("result",results);
                return(result.toString());
            }
            catch (IOException e) {
                e.printStackTrace();
                return "exception";
            } finally {
                conn.disconnect();
            }
        }
        @Override
        protected void onPostExecute(String result) {
            pdLoading.dismiss();
            JSONArray jsonArray = null;
            try {
                jsonArray = new JSONArray(response);
            } catch (JSONException e) {
                e.printStackTrace();
            }
            ArrayList<MenuItemDataModel> itemslist = MenuItemDataModel.fromJson(jsonArray); // ERROR HERE
            //CartAdapter adapter = new CartAdapter(CartActivity.this, itemslist);
            //adapter.addAll(itemslist);
            //listView.setAdapter(adapter);
            //data=MenuItemDataModel.fromJson(jsonArray);
            adapter1 = new MenuItemAdapterCart(context, itemslist);
            recyclerView1.setAdapter(adapter1);
            if (result != null) {
                Toast.makeText(CartActivity.this, "Items Fetched successfully", Toast.LENGTH_LONG).show();
            } else {
                // If username and password does not match display a error message
                Toast.makeText(CartActivity.this, "Fetch Failed.", Toast.LENGTH_LONG).show();
            }
        }
    }
}
Thanks in advance for the help
 
    