#php #android #json #android-volley
#php #Android #json #android-volley
Вопрос:
Я создал простой код ответа в формате json, но в ANDROID он отображается как строка, а не объект, поэтому я зашел на веб-сайт JSON Validator. Когда я копирую ответ, он говорит, что JSON является верным, но когда я проверяю по URL, он показывает мне следующее:
Error:Invalid encoding, expecting UTF-8, UTF-16 or UTF-32.[Code 29, Structure 0]
Error:Expecting object or array, not string.[Code 1, Structure 1]
Error:Strings should be wrapped in double quotes.[Code 17, Structure 1]
Ответ Json:
{"questions":[{"id":"1","user_id":"1","city":"1","question":"we","likes":"0","img":"0","req_date":"2016-10-03 23:06:06","qort":"q","user_name":"basel","user_img":"0","comments":"$num"},{"id":"2","user_id":"1","city":"1","question":"u0633u064a u0634u0633u064au0628u0633 u0628u064au0633 u0628u064au0633","likes":"0","img":"0","req_date":"2016-10-03 23:30:44","qort":"q","user_name":"basel","user_img":"0","comments":"0"},{"id":"3","user_id":"3","city":"2","question":"u0633u064a u0634u0633u064a2222u0628u0633 u0628u064au0633 u0628u064au0633","likes":"0","img":"0","req_date":"2016-10-03 23:32:06","qort":"q","user_name":"u0645u062du0645u062f u0627u0644u0633u0639u064au062fu064a","user_img":"","comments":"0"},{"id":"4","user_id":"1","city":"1","question":"u0645u0631u062du0628u0627 u0645u0631u062du0628u0627 u062au0633u064au0633u064a u062au0633u064a u0633u062au0646u064au0645 u0633u064a u0633u0646u064a u0633u0646u0645u064a u0633u0646 u0646u0633u0634u064a u0649u0646u0645u0629","likes":"0","img":"0","req_date":"2016-10-03 23:32:59","qort":"q","user_name":"basel","user_img":"0","comments":"0"},{"id":"5","user_id":"1","city":"1","question":"u0645u0631u062du0628u0627 u0645u0631u062du0628u0627 u062au0633u064au0633u064a u062au0633u064a u0633u062au0646u064au0645 u0633u064a u0633u0646u064a u0633u0646u0645u064a u0633u0646 u0646u0633u0634u064a u0649u0646u0645u0629","likes":"0","img":"0","req_date":"2016-10-04 00:18:41","qort":"q","user_name":"basel","user_img":"0","comments":"0"}]}
JSON в красивом формате:
{
"questions": [
{
"id": "1",
"user_id": "1",
"city": "1",
"question": "we",
"likes": "0",
"img": "0",
"req_date": "2016-10-03 23:06:06",
"qort": "q",
"user_name": "basel",
"user_img": "0",
"comments": "$num"
},
{
"id": "2",
"user_id": "1",
"city": "1",
"question": "سي شسيبس بيس بيس",
"likes": "0",
"img": "0",
"req_date": "2016-10-03 23:30:44",
"qort": "q",
"user_name": "basel",
"user_img": "0",
"comments": "0"
},
{
"id": "3",
"user_id": "3",
"city": "2",
"question": "سي شسي2222بس بيس بيس",
"likes": "0",
"img": "0",
"req_date": "2016-10-03 23:32:06",
"qort": "q",
"user_name": "محمد السعيدي",
"user_img": "",
"comments": "0"
},
{
"id": "4",
"user_id": "1",
"city": "1",
"question": "مرحبا مرحبا تسيسي تسي ستنيم سي سني سنمي سن نسشي ىنمة",
"likes": "0",
"img": "0",
"req_date": "2016-10-03 23:32:59",
"qort": "q",
"user_name": "basel",
"user_img": "0",
"comments": "0"
},
{
"id": "5",
"user_id": "1",
"city": "1",
"question": "مرحبا مرحبا تسيسي تسي ستنيم سي سني سنمي سن نسشي ىنمة",
"likes": "0",
"img": "0",
"req_date": "2016-10-04 00:18:41",
"qort": "q",
"user_name": "basel",
"user_img": "0",
"comments": "0"
}
]
}
PHP-код:
<?php
header("Content-Type:application/json; charset=utf-8");
include_once("config.php");
class Questions
{
public $id;
public $user_id;
public $city;
public $question;
public $likes;
public $img;
public $req_date;
public $qort;
//public $user_name;
//public $user_img;
//public $comments;
//didnt help
}
function getQ (){
$sql= "select * from `questions`";
$result = mysql_query($sql);
if (mysql_num_rows($result) > 0){
$ques=array();
while ($ques_info= mysql_fetch_array($result)){
$uid = $ques_info['user_id'];
$qid = $ques_info['id'];
$info = new Questions();
$info->qort= 'q';
$info->id= $ques_info['id'];
$info->user_id=$ques_info['user_id'];
$info->city=$ques_info['city'];
$info->question=$ques_info['question'];
$info->img='0';
$info->likes=$ques_info['likes'];
$info->req_date=$ques_info['req_date'];
$sqluname = "select * from `users` where `id`='".$uid."'";
$resultuname = mysql_query($sqluname);
if (mysql_num_rows($resultuname) > 0){
while ($user_info= mysql_fetch_array($resultuname)){
$info->user_name= $user_info['name'];
$info->user_img= $user_info['img'];
}
}
$sqlcomments = "select * from `question_comments` where `question_id`='".$qid."'";
$resultcomments = mysql_query($sqlcomments );
$num = mysql_num_rows($resultcomments);
if ($num > 0){
$info->comments= '$num';
}else{
$info->comments= '0';
}
array_push($ques, $info);
}
echo json_encode(array('questions' => $ques), true);
}
}
switch ($_GET['do'])
{
case 'getQ':
{
getQ ();
}
}
Я собираюсь сойти с ума, что не так, пожалуйста?
В Android я использую Voelly, я получаю ошибку типа java.lang.string, которую нельзя преобразовать в JSONObject
код Android:
private void fetchPosts() {
Log.e("ir", "fetchPosts");
JsonObjectRequest postReq = new JsonObjectRequest(Request.Method.GET, url, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject jsonObject) {
try {
Log.e("ir", "onResponse");
Log.e("ir", "GONE");
JSONArray response = jsonObject.getJSONArray("questions");
for (int i = 0; i < response.length(); i ) {
JSONObject obj = response.getJSONObject(i);
qlist ads = new qlist();
ads.setQort(obj.getString("qort"));
ads.setIdquestion(obj.getString("id"));
ads.setIduser(obj.getString("user_id"));
ads.setQuestion(obj.getString("question"));
ads.setLikes(obj.getString("likes"));
ads.setComments(obj.getString("comments"));
ads.setImg(obj.getString("img"));
ads.setReq_date(obj.getString("req_date"));
ads.setUser_name(obj.getString("user_name"));
ads.setUser_img(obj.getString("user_img"));
postsList.add(ads);
Log.e("ir", "questions");
}
getManshateAd();
} catch (JSONException e) {
Log.e("ir", "JSONException");
e.printStackTrace();
}
adapter.notifyDataSetChanged();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError arg0) {
Log.e("ir", "onErrorResponse" arg0);
}
}) {
@Override
public Request.Priority getPriority() {
return Request.Priority.IMMEDIATE;
}
};
postReq.setRetryPolicy(new DefaultRetryPolicy(50000,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
AppController.getInstance().addToRequestQueue(postReq);
}
заранее спасибо.
Ответ №1:
Проверьте свою кодировку respose. Возможно, ваш ответ содержит символ спецификации.
Комментарии:
1. Нет, он не содержит никаких символов спецификации
2. после двух дней напряженной работы я обнаружил, что config.php файл был закодирован в UTF-8-BOM в notepad , поэтому я преобразовал его в UTF-8, спасибо, что указали мне на это