Search code examples
androidjsonspinnerandroid-spinner

Populate a spinner in android with default values if there is no internet and it is not able to retrieve values from the database


I have a code that connects to my API and gets values for my spinner in my android application. I want it to populate it with some default values if there is no internet connectivity. Here is my code.

The spinner gets the names of products and uses that, but what if there is no internet, then it should fill it with some default values.



    private void retrieveJSON() {

//        showSimpleProgressDialog(this, "Loading...","Fetching Json",false);

        StringRequest stringRequest = new StringRequest(Request.Method.GET, URLstring,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {

                        Log.d("strrrrr", ">>" + response);

                        try {

                            JSONObject obj = new JSONObject(response);
                            if(obj.optString("error").equals("false")){

                                goodModelArrayList = new ArrayList<>();
                                JSONArray dataArray  = obj.getJSONArray("requests");

                                for (int i = 0; i < dataArray.length(); i++) {

                                    ModelData playerModel = new ModelData();
                                    JSONObject dataobj = dataArray.getJSONObject(i);

                                    playerModel.setName(dataobj.getString("name"));

                                    goodModelArrayList.add(playerModel);

                                }

                                for (int i = 0; i < goodModelArrayList.size(); i++){
                                    names.add(goodModelArrayList.get(i).getName().toString());
                                }

                                ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(GoodsInActivity.this, simple_spinner_item, names);
                                spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // The drop down view
                                spinner.setAdapter(spinnerArrayAdapter);
                            }

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        //displaying the error in toast if occurrs
                        Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_SHORT).show();
                    }
                });

        // request queue
        RequestQueue requestQueue = Volley.newRequestQueue(this);

        requestQueue.add(stringRequest);


    }


Solution

  • Define and initialize a names_default(list or array) with default value. then check goodModelArrayList size like that ::

    if(goodModelArrayList.size > 0){
     for (int i = 0; i < goodModelArrayList.size(); i++){                              
      names.add(goodModelArrayList.get(i).getName().toString());}
      ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(GoodsInActivity.this, simple_spinner_item, names);spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // The drop down view
      spinner.setAdapter(spinnerArrayAdapter);
     
    }else{
      //set adapter with names_default(list or array)
      ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(GoodsInActivity.this, simple_spinner_item, names_default);spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // The drop down view
      spinner.setAdapter(spinnerArrayAdapter);
    }
    

    Same else condition code you can use when you get no internet connection in your app and also in onErrorResponse method.