org.json.JSONException:字符0的输入结束

There is some issue with the JSONObjectRequest in Volley library to receive the JSON data. I suppose I am going wrong somewhere in receiving the JSON object in the Java code. Following is my JSON output coming as a response from the php file hosted on server:

{"workers":[
           {"id":"1","name":"Raja","phonenumber":"66589952","occupation":"Plumber","location":"Salunke Vihar","rating":"4","Review":"Hard Worker","price":"80"},
           {"id":"2","name":"Aman","phonenumber":"789456","occupation":"Plumber","location":"Wakad","rating":"4","Review":"Good","price":"80"}
          ],
"success":1}

Following is clode from the Java file where I am using the JSON request using Volley library:

JsonObjectRequest jsonRequest = new JsonObjectRequest (Request.Method.POST, url,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    try {
                        // I should receive the success value 1 here
                        int success = response.getInt("success");
                        //and should receive the workers array here
                        Log.d("response",response.getJSONArray("workers").toString());
                        Log.d("success",""+success);

                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                    Toast.makeText(getApplicationContext(), response.toString(), Toast.LENGTH_LONG).show();
                    recyclerView = (RecyclerView) findViewById(R.id.recyclerView);

                    recyclerView.setHasFixedSize(true);
                    layoutManager = new LinearLayoutManager(getApplicationContext());
                    recyclerView.setLayoutManager(layoutManager);
                    //Finally initializing our adapter
                    adapter = new WorkerAdapter(listWorkers);
                    recyclerView.setAdapter(adapter);
                   //adapter is working fine
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                   Log.d("error",error.toString());
                    Toast.makeText(getApplicationContext(),error.toString(),Toast.LENGTH_LONG).show();
                }
            }){
        @Override
        protected Map<String,String> getParams(){
            Map<String,String> params = new HashMap<String, String>();
            params.put("tag", "get_list");
            params.put("service", service);
            return params;
        }

Running the above code it goes to the error listener and gives the output as org.json.JSONException: End of input at character 0 of. But if I use StringRequest in place of JsonObjectRequest and receive the JSON response as a string then I am able to receive the output as a String but I can't use it further. So, please let me know where I am going wrong in receiving the JSONdata and suggest me the changes in the code that I must do.

EDIT- I am adding the php file which is returning the JSON object. Please let me know if there is some error over here:

<?php
error_reporting(0);
include("config.php");

if($_SERVER['REQUEST_METHOD']=='POST'){    
$tag = $_POST['tag'];
// array for JSON response
$response = array();

if ($tag == 'get_list') {
// Request type is check Login
$service = $_POST['service'];

//echo json_encode($service);   

// get all items from myorder table
$result = mysql_query("SELECT * FROM Workers WHERE Occupation = '$service'") or die(mysql_error());

if (mysql_num_rows($result) > 0) {

    $response["workers"] = array();

    while ($row = mysql_fetch_array($result)) {
            // temp user array
            $item = array();
            $item["id"] = $row["wID"];
            $item["pic"] = $row["Pic"];
            $item["name"] = $row["Name"];
            $item["phonenumber"] = $row["Phone Number"];
            $item["occupation"] = $row["Occupation"];
            $item["location"] = $row["Location"];
            $item["rating"] = $row["Rating"];
            $item["Review"] = $row["Review"];
            $item["price"] = $row["Price"];


            // push ordered items into response array
            array_push($response["workers"], $item);
           }
      // success
     $response["success"] = 1;
}
else {
    // order is empty
      $response["success"] = 0;
      $response["message"] = "No Items Found";
}
}   
echo json_encode($response);    
}
?>

When I ran the api end point I have got the following result instead of the one that you have been telling so. So stop giving irrelevant data.

"Plumber"{"workers":[{"id":"1","pic":"ttp:\/\/vorkal.com\/images\/vorkal_cover.PNG","name":"Raja","phonenumber":"66589952","occupation":"Plumber","location":"Salunke Vihar","rating":"4","Review":"Hard Worker. Very Professional.","price":"80"},{"id":"2","pic":"http:\/\/vorkal.com\/images\/vorkal_cover.PNG","name":"Aman","phonenumber":"789456","occupation":"Plumber","location":"Wakad","rating":"4","Review":"Good","price":"80"}],"success":1}

Where Plumber is not the tag at all, hence throws error as the same is not valid json string. There's error in your server side scripting. I request you to send the complete script without modification.

If you are not getting the JSONObject that means the following is a malformed json. Thus you can try the following code in server side

 function utf8ize($d) {
if (is_array($d)) {
    foreach ($d as $k => $v) {
        $d[$k] = $this->utf8ize($v);
    }
} else if (is_string ($d)) {
    return utf8_encode($d);
}
return $d;
}

where$d is the string/response. use it as echo json_encode($this->utf8ize($detail));

Also try the following in client side code

Gson gson = new Gson();
JsonReader reader = new JsonReader(new StringReader(result1));
reader.setLenient(true);

You may refer the solution to this question here click here

Can you check that server is returning you a JSONObject and not the string? In Volley if the type of response is different then it will return the error.

you can use Gson to convert json string to object

 Gson gson = new Gson();
 GetWorkersResponse getWorkersResponse =gson.fromJson(response,GetWorkersResponse.class);


 class GetWorkersResponse {
          public boolean success;
          public List<Worker> workers = new ArryList<>(); 
     }

It's work for me.