【问题标题】:com.android.volley.parse error org.json.jsonexception value of type java.lang.string cannot be converted to jsonArray in Android Volleycom.android.volley.parse 错误 org.json.jsonexception 类型 java.lang.string 的值无法在 Android Volley 中转换为 jsonArray
【发布时间】:2014-12-10 11:49:04
【问题描述】:

当我运行这个程序时,我得到了这个错误。我不知道怎么解决。请帮我找到它。

这是我的 json_encode php 代码 api。

  $i=0;
  while ($row = $result->fetch_assoc())
  {
   $array[$i]=array(
        "news_id" => $row["news_id"], 
        "news_title" => $row["news_title"], 
        "news_abstract" => $row["news_abstract"], 
        "news_content" => $row["news_content"], 
        "news_date" => $row["news_date"], 
        "news_link" => $row["news_link"], 
        "news_image_link" => $row["news_image_link"], 
        "sources_name" => $row["sources_name"], 
        "category_name" => $row["category_name"],
        "news_visible" => $row["news_visible"]
    );
    $i++;
  }
    $json=json_encode($array, JSON_HEX_TAG|JSON_HEX_APOS);

还有我的 Android Volley JsonArrayRequest 的 JsonArrayRequest。

JsonArrayRequest newsRequest = new JsonArrayRequest( Url.getUrlJson(), new  Response.Listener<JSONArray>(){
        @Override
        public void onResponse( JSONArray response ){
            Log.d( TAG, response.toString() );
            hidePDialog();

            // Parsing json
            for( int i = 0; i < response.length(); i++ ){
                try{
                    JSONObject obj = response.getJSONObject( i );
                    News news = new News();
                     if( "1".equals( obj.getString( "news_visible" )) ){

                        news.setNews_id( obj.getString( "news_id" ) );
                        news.setNews_title( obj.getString( "news_title" ) );
                        news.setNews_abstract( obj.getString( "news_abstract" ) );
                        news.setNews_content( obj.getString( "news_content" ) );
                        news.setNews_date( obj.getString( "news_date" ) );
                        news.setNews_link( obj.getString( "news_link" ) );
                        news.setNews_image_link( obj.getString( "news_image_link" ));
                        news.setSources_name( obj.getString( "sources_name" ) );
                        news.setCategory_name( obj.getString( "category_name" ) );
                    }
                    newsList.add( news );
                }
                catch( JSONException e ){
                    e.printStackTrace();
                }

【问题讨论】:

  • 你能展示你的json结构吗?

标签: java android json android-volley arrays


【解决方案1】:

内容类型

<?PHP
header('Content-Type: application/json');

Returning JSON from a PHP script

字节顺序标记

.php 文件或其任何includes 具有UTF-8 字符编码时,PHP 很容易在响应的开头返回BOM

有关详细信息,请参阅this W3C answerUTF-8 BOM in this post 部分。

防止 PHP 预先添加 BOM 的一种建议方法是将 change the character set of your php file(s) 从 UTF-8 转换为 ASCII 或 ISO-8859-15。

【讨论】:

  • 是的,您得到的似乎是 JSON 数据,但它不符合 RFC 4627(JSON 规范)。也许您可以使用 JSON 验证器来查找违规内容。如果您仍然收到相同的错误消息,请尝试使用字符串响应侦听器 Response.Listener&lt;String&gt; 而不是 Response.Listener&lt;JSONArray&gt;
  • 但我会收到 json 数组,如果我收到字符串,我该如何进行解析。例如:JsonObject str=news JsonObject(response); JsonArray 数组=str.getJsonArray();这是错误的。
  • 我同意,这将是一个错误。无效字符是响应正文中的前三个字符,在 JSON 数组开始之前。它们是 PHP 的 BOM(字节顺序标记)。有关更多信息,请在此答案中找到 UTF-8 BOM stackoverflow.com/questions/8028957/…
  • 如何在 php 中编辑字符问题?我明白了,通常我收到 json 数据,但由于字符问题,它告诉我字符串。
  • 使用 ASCII 编码而不是 unicode 保存您的 .php 源文件(和任何包含)。
【解决方案2】:

你得到的响应是一个字符串,你正试图将它分配给 jsonArray

【讨论】:

  • 我知道这个打印是字符串,但是如何在 php 中创建 json 数据
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-21
相关资源
最近更新 更多