Why do I get an empty response when my android app calls my API on my server?
<p>I have android application that called information and show it as a list.</p>

<p>I have a spinner when you choose the date from the spinner you get the information related to that date.</p>

<p>In the app first load it calls automatically today information.</p>

<p>this is the code I use in my main activity to create my spinner and fill it with elements and handle the clicks on each item:</p>

<pre><code>// Spinner element
spinner = (Spinner) v.findViewById(R.id.spinner);

// Spinner click listener
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
      public void onItemSelected(AdapterView&lt;?&gt; parent, View view,
                                       int position, long id) {
                // On selecting a spinner item
                //String item = parent.getItemAtPosition(position).toString();
                switch(position){
                    case 3:
                        if (JsonUtils.isNetworkAvailable(getActivity())) {
                            list.clear();
                            new MyTask().execute(Config.SERVER_URL + "/banko_api.php?d_o=-1");
                        } else {
                            Toast.makeText(getActivity(), getResources().getString(R.string.failed_connect_network), Toast.LENGTH_SHORT).show();
                        }
                        break;
                    case 4:
                        if (JsonUtils.isNetworkAvailable(getActivity())) {
                            list.clear();
                            new MyTask().execute(Config.SERVER_URL + "/banko_api.php?d_o=0");
                        } else {
                            Toast.makeText(getActivity(), getResources().getString(R.string.failed_connect_network), Toast.LENGTH_SHORT).show();
                        }
                        break;
                    case 5:
                        if (JsonUtils.isNetworkAvailable(getActivity())) {
                            list.clear();
                            new MyTask().execute(Config.SERVER_URL + "/banko_api.php?d_o=1");
                        } else {
                            Toast.makeText(getActivity(), getResources().getString(R.string.failed_connect_network), Toast.LENGTH_SHORT).show();
                        }
                        break;
                    default:
                        if (JsonUtils.isNetworkAvailable(getActivity())) {
                            list.clear();
                            new MyTask().execute(Config.SERVER_URL + "/banko_api.php?d_o=0");
                        } else {
                            Toast.makeText(getActivity(), getResources().getString(R.string.failed_connect_network), Toast.LENGTH_SHORT).show();
                        }
                        break;
                }
            }

            @Override
            public void onNothingSelected(AdapterView&lt;?&gt; parent) {

            }
        });



        Calendar calendar = Calendar.getInstance();
        Date today = calendar.getTime();

        calendar.add(Calendar.DAY_OF_YEAR, -1);
        Date yesterday = calendar.getTime();

        calendar = Calendar.getInstance();

        calendar.add(Calendar.DAY_OF_YEAR, 1);
        Date tomorrow = calendar.getTime();


        DateFormat dateFormat = new SimpleDateFormat("dd/MM EEE");
        String todayAsString = dateFormat.format(today);
        String tomorrowAsString = dateFormat.format(tomorrow);
        String yesterdayAsString = dateFormat.format(yesterday);


        // Spinner Drop down elements
        List&lt;String&gt; categories = new ArrayList&lt;String&gt;();

        categories.add(yesterdayAsString);
        categories.add(todayAsString);
        categories.add(tomorrowAsString);

        // Creating adapter for spinner
        ArrayAdapter&lt;String&gt; dataAdapter = new ArrayAdapter&lt;String&gt;(getContext(), R.layout.spinner_item, categories);


        dataAdapter.setDropDownViewResource(R.layout.spinner_dropdown_item);
        // attaching data adapter to spinner

        spinner.setAdapter(dataAdapter);

        spinner.setSelection(4);
</code></pre>

<p>The problem : first load of the app is calling the data of today (which is the default choice in my spinner) without any problem.
if i choose another element in the spinner it also calls the related data without problem.
now if I want to select back today element in the spinner no data will be brought from the server even when the app at the start up it calls data from the same link and get it.</p>

<p>I get this message in my log :
<code>W/System.err: org.json.JSONException: Value [] of type org.json.JSONArray cannot be converted to JSONObject</code></p>

<p>The onPostExcute of my Asynktask contains this code:</p>

<pre><code>@Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);

            if (null != progressDialog &amp;&amp; progressDialog.isShowing()) {
                progressDialog.dismiss();
            }

            if (null == result || result.length() == 0) {
                Toast.makeText(getActivity(), getResources().getString(R.string.failed_connect_network), Toast.LENGTH_SHORT).show();
            } else {

                try {
                    Log.d("resultTT",result);
                    JSONObject mainJson = new JSONObject(result);
                    JSONArray jsonArray = mainJson.getJSONArray(JsonConfig.CATEGORY_ARRAY_NAME);
                    JSONObject objJson = null;
                    for (int i = 0; i &lt; jsonArray.length(); i++) {

                        objJson = jsonArray.getJSONObject(i);
                        ItemMatch objItem = new ItemMatch();
                        objItem.setMatchId(objJson.getString(JsonConfig.Match_ID));
                        objItem.setMatchTournamentName(objJson.getString(JsonConfig.Match_LEAGUE_NAME));
                        objItem.setMatchTime(objJson.getString(JsonConfig.Match_TIME));
                        objItem.setMatchStatus(objJson.getString(JsonConfig.Match_STATUS));
                        objItem.setMatchLocalTeamName(objJson.getString(JsonConfig.Match_LOCALTEAM_NAME));
                        objItem.setMatchVisitorTeamName(objJson.getString(JsonConfig.Match_VISITORTEAM_NAME));
                        objItem.setMatchLocalTeamGoals(objJson.getString(JsonConfig.Match_LOCALTEAM_GOALS));
                        objItem.setMatchVisitorTeamGoals(objJson.getString(JsonConfig.Match_VISITORTEAM_GOALS));
                        objItem.setMatchBestOddPercent(objJson.getString(JsonConfig.Match_BEST_ODD_PERCENT));
                        objItem.setMatchBestOddResult(objJson.getString(JsonConfig.Match_BEST_ODD_RESULT));
                        list.add(objItem);
                    }

                } catch (JSONException e) {
                    e.printStackTrace();
                }


                for (int j = 0; j &lt; list.size(); j++) {
                    object = list.get(j);

                    array_match_id.add(String.valueOf(object.getMatchId()));
                    str_match_id = array_match_id.toArray(str_match_id);

                    array_league_name.add(String.valueOf(object.getMatchTournamentName()));
                    str_league_name = array_league_name.toArray(str_league_name);

                    array_match_time.add(String.valueOf(object.getMatchTime()));
                    str_match_time = array_match_time.toArray(str_match_time);

                    array_match_status.add(String.valueOf(object.getMatchStatus()));
                    str_match_status = array_match_status.toArray(str_match_status);

                    array_match_localteam_name.add(object.getMatchLocalTeamName());
                    str_match_localteam_name = array_match_localteam_name.toArray(str_match_localteam_name);

                    array_match_visitorteam_name.add(object.getMatchVisitorTeamName());
                    str_match_visitorteam_name = array_match_visitorteam_name.toArray(str_match_visitorteam_name);

                    array_match_localteam_goals.add(object.getMatchLocalTeamGoals());
                    str_match_localteam_goals = array_match_localteam_goals.toArray(str_match_localteam_goals);

                    array_match_visitorteam_goals.add(object.getMatchVisitorTeamGoals());
                    str_match_visitorteam_goals = array_match_visitorteam_goals.toArray(str_match_visitorteam_goals);

                    array_match_best_odd_percent.add(object.getMatchBestOddPercent());
                    str_match_best_odd_percent = array_match_best_odd_percent.toArray(str_match_best_odd_percent);

                    array_match_best_odd_result.add(object.getMatchBestOddResult());
                    str_match_best_odd_result = array_match_best_odd_result.toArray(str_match_best_odd_result);
                }

                setAdapterToListView();
            }
</code></pre>

<p>In the <code>try</code> section of this code u can see I make a log of the result to see what is coming from the server i just get this : <code>D/resultTT:  []</code></p>

<p>and as you see the try is inside the else section so in the if statement of this section i check if the result is null or empty ; but the code passes it and enter the else statement but still showing that the returned result array is empty.</p>

<p>I want some help to find the reason behind this empty returned array even it loads fine at the start up. why can not it get the information after I choose any element in the spinner and then come back to the default (today) element?  </p>

<p>UPDATE : this is my php side-server api code </p>

<pre><code>&lt;?php

    include_once ('includes/variables.php');

    DEFINE ('DB_HOST', $host);
    DEFINE ('DB_USER', $user);   
    DEFINE ('DB_PASSWORD', $pass);
    DEFINE ('DB_NAME', $database);

    $mysqli = @mysql_connect (DB_HOST, DB_USER, DB_PASSWORD) OR die ('Could not connect to MySQL');
    @mysql_select_db (DB_NAME) OR die ('Could not select the database');

 ?&gt;

&lt;?php

    mysql_query("SET NAMES 'utf8'"); 
    $date_offset = mysql_real_escape_string($_GET[d_o]);
    //$date_offset = 0;
    if(empty($date_offset) || $date_offset == "0")
    {
        $date_offset_value = "0";
        $query="SELECT a.*, m.match_id, m.match_time, m.en_tournament_name FROM app_banko a inner join matches_of_comments m on m.match_id = a.match_id where a.date_offset = $date_offset_value limit 20";         
        $resouter = mysql_query($query);
    }
    else
    {
        $date_offset_value = $date_offset;  
        $query="SELECT a.*, m.match_id, m.match_time, m.en_tournament_name FROM app_banko a inner join matches_of_comments m on m.match_id = a.match_id where a.date_offset = $date_offset_value limit 20";         
        $resouter = mysql_query($query);
    }


    $set = array();

    $total_records = mysql_num_rows($resouter);
    if($total_records &gt;= 1){

      while ($link = mysql_fetch_array($resouter, MYSQL_ASSOC)){

        $set['NewsApp'][] = $link;
      }
    }

     echo $val= str_replace('\\/', '/', json_encode($set)); 

?&gt;
</code></pre>