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

Java org.json.JSONException:在的字符0处输入结束,java,php,android,json,android-volley,Java,Php,Android,Json,Android Volley,Volley库中接收JSON数据的JSONObjectRequest存在一些问题。我想我在接收Java代码中的JSON对象时出错了。以下是我的JSON输出,作为服务器上托管的php文件的响应: {"workers":[ {"id":"1","name":"Raja","phonenumber":"66589952","occupation":"Plumber","location":"Salunke Vihar","rating":"4","Review":"Hard Wo

Volley库中接收JSON数据的
JSONObjectRequest
存在一些问题。我想我在接收Java代码中的JSON对象时出错了。以下是我的JSON输出,作为服务器上托管的php文件的响应:

{"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}
下面是我使用截取库使用JSON请求的Java文件中的clode:

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;
        }

您是否可以检查服务器是否返回JSONObject而不是字符串?在截击中,如果响应类型不同,那么它将返回错误。

能否检查服务器是否返回JSONObject而不是字符串?在截击中,如果响应类型不同,则将返回错误。

您可以使用Gson将json字符串转换为对象

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


 class GetWorkersResponse {
          public boolean success;
          public List<Worker> workers = new ArryList<>(); 
     }
Gson-Gson=new-Gson();
GetWorkersResponse GetWorkersResponse=gson.fromJson(response,GetWorkersResponse.class);
类GetWorkersResponse{
公众的成功;
public List workers=new ArryList();
}

这对我来说很有用。

您可以使用Gson将json字符串转换为对象

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


 class GetWorkersResponse {
          public boolean success;
          public List<Worker> workers = new ArryList<>(); 
     }
Gson-Gson=new-Gson();
GetWorkersResponse GetWorkersResponse=gson.fromJson(response,GetWorkersResponse.class);
类GetWorkersResponse{
公众的成功;
public List workers=new ArryList();
}

这对我来说很有用。

当我运行api端点时,我得到了以下结果,而不是您一直告诉我的结果。因此,停止提供无关数据。

"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}
其中,
Plumber
根本不是标记,因此抛出错误,因为该标记无效
json
字符串您的服务器端脚本中有错误。我请求您发送完整的脚本,无需修改

如果您没有得到
JSONObject
,则表示以下是格式错误的
json
。因此,您可以在服务器端尝试以下代码

 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;
}
其中,
$d
是字符串/响应。将其用作echo json_encode($this->utf8ize($detail))

还可以在客户端代码中尝试以下操作

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

您可以在这里引用此问题的解决方案,当我运行api end point时,我得到了以下结果,而不是您刚才所说的结果。因此,停止提供无关数据。

"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}
其中,
Plumber
根本不是标记,因此抛出错误,因为该标记无效
json
字符串您的服务器端脚本中有错误。我请求您发送完整的脚本,无需修改

如果您没有得到
JSONObject
,则表示以下是格式错误的
json
。因此,您可以在服务器端尝试以下代码

 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;
}
其中,
$d
是字符串/响应。将其用作echo json_encode($this->utf8ize($detail))

还可以在客户端代码中尝试以下操作

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

您可以在此处参考该问题的解决方案

右侧的“相关”列中,我看到10个标题完全相同的问题。你读过吗?我想你没有收到与你在问题中添加的答案相同的答案。试着在下面的第一行打印你的答案{。你会发现问题的。!!@Rvdk谢谢你的建议。我看到了所有这些问题,他们所要说的是错误是由于空响应造成的。但是,当我使用
StringRequest
时,我没有收到空响应。只是当我使用
JsonObjectRequest
时,我收到了这个错误。所以,请允许我知道你是否还有其他建议。你能把发出stringrequest时收到的输出放进去吗?@silverFoxA stringrequest的输出就是我上面提到的JSON输出。它就像一个字符串,我在这里发布之前已经缩进了它。如果你在“相关”右侧有任何进一步的建议,请告诉我专栏中,我看到10个标题完全相同的问题。你读过吗?我想你没有收到与你在问题中添加的答案相同的答案尝试在下面的第一行打印你的答案
try{
。你会发现问题的。!!@Rvdk谢谢你的建议。我看到了所有这些问题,他们所要说的是错误是由于空响应造成的。但是,当我使用
StringRequest
时,我没有收到空响应。只是当我使用
JsonObjectRequest
时,我收到了这个错误。所以,请允许我知道你是否还有其他建议。你能把你在发出stringrequest时收到的输出放进去吗?@silverFoxA stringrequest的输出就是我上面提到的JSON输出。它就像一个字符串,我在这里发布之前已经缩进了它。如果你有任何进一步的建议,请让我知道我们如何检查服务器是returning a JSONObject与否??我还在服务器上添加了php文件代码。如果您看到php文件或java文件中需要进行一些更改,请告知我,在将响应编码为JSON时,您必须使用此方法JSON_encode($response,JSON_FORCE_OBJECT)否则,json_encode返回一个jsonArray,这可能是您出错的原因。我们如何检查服务器是否返回JSONObject?我还在服务器上添加了php文件代码。如果您看到php文件或java文件中需要做一些更改,请告诉我,在将响应编码为json时,您必须使用此方法json_encode($response,json_FORCE_OBJECT),否则json_encode会返回jsonArray,这可能是您出错的原因感谢@silverFoxA在服务器端脚本中找到错误。我使用以下代码从字符串中获取json:
JSONObject JSONObject=new JSONObject(response);int success=jsonObject.getInt(“success”);String workerary=jsonObject.getString(“workers”);JSONArray jar=new JSONArray(workerary);jsonObject js