java - java.lang.String类型的JSON异常值连接无法转换为JSONArray

标签 java android arrays jsonexception

PHP 代码:(DBadapter.php)

   

 <?php 
    require_once 'init.php';

    class DBadapter
    {

    	public function select()
    	{
    		global $con;
    		$retrived = $con->query("select id,name,quantity from product");
    		echo"in DBadapter";
    		if ($retrived) {
    			
    			while ($row=mysqli_fetch_array($retrived)) {
    				$product[]=$row;
    			}
    			print(json_encode($product));
    		}
    		else
    		{
    			print(json_encode(array("CANT retrive data")));
    		}

    	}

    }



     ?>

(index.php):

<?php 

require_once 'DBadapter.php';

$dbadapter=new DBadapter();
$dbadapter->select();


 ?>

Android代码:(此处的catch block 正在执行)

此处,表“products”中的数据是从 phpMysql 数据库中获取的,并在 android studio 的 Tableview 中检索

package edmt.dev.androidgridlayout.mMySQL;

import android.content.Context;
import android.widget.Toast;

import com.androidnetworking.AndroidNetworking;
import com.androidnetworking.common.Priority;
import com.androidnetworking.error.ANError;
import com.androidnetworking.interfaces.JSONArrayRequestListener;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;

import de.codecrafters.tableview.TableView;
import de.codecrafters.tableview.toolkit.SimpleTableDataAdapter;
import edmt.dev.androidgridlayout.TableHelper;
import edmt.dev.androidgridlayout.mModel.Product;

public class MySQLClient {

    private static final String retrive_url="http://10.0.2.2/kamakshi/index.php";

    private final Context c;
    private SimpleTableDataAdapter adapter;
    public MySQLClient(Context c) {
        this.c = c;
    }

    public void retrive(final TableView tb)
    {
        final ArrayList<Product> products = new ArrayList<>();
        AndroidNetworking.get(retrive_url)
                .setPriority(Priority.HIGH)
                .build()
                .getAsJSONArray(new JSONArrayRequestListener() {
                    @Override
                    public void onResponse(JSONArray response) {
                        JSONObject jo;
                        Product p;
                        try {
                            for (int i=0;i<response.length();i++)
                            {
                                jo=response.getJSONObject(i);
                                int id=jo.getInt("id");
                                String name=jo.getString("name");
                                String quantity=jo.getString("quantity");

                                p = new Product();
                                p.setId(id);
                                p.setName(name);
                                p.setQuantity(quantity);

                                products.add(p);
                            }
                            adapter = new SimpleTableDataAdapter(c,new TableHelper(c).returnProductArray(products));
                            tb.setDataAdapter(adapter);

                        }catch (JSONException e)
                        {
                            Toast.makeText(c,"JSON Error"+e.getMessage(),Toast.LENGTH_LONG).show();
                        }

                    }

                    @Override
                    public void onError(ANError anError) {
                        anError.printStackTrace();
                        Toast.makeText(c,"unsuccessful : error is :"+anError.getMessage(),Toast.LENGTH_LONG).show();

                    }
                });

    }
}

output:android studio模拟器的输出

its output of android studio emulator

OUTPUT:android studio中logcat的输出

Its the output of logcat in android studio

Its the output of index.php opened in webbrowser

最佳答案

我认为问题出在响应的内容类型上。默认情况下,来自 PHP 服务器的任何响应的内容类型都是纯文本/文本。因此,android 库将其视为纯文本响应,而不是JSON 响应

要解决您的问题,您可能需要通过在 print 语句之前添加以下内容,将响应内容类型设置为 application/json

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

编辑: 正如我在输出和代码中看到的,您正在打印一些额外的字符串,输出如 Connection Success 和 echo"in DBadapter"; (在 DBadaper.php 中)。因此,输出变为无效 JSON。只需删除这些 echo 语句,您的代码就可以工作

关于java - java.lang.String类型的JSON异常值连接无法转换为JSONArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60354316/

相关文章:

对话框内的android View ListView 对话框

c++ - 使用指针将 2 个矩阵相乘

PHP - 替换多维数组中的数据,特定键

java - Opengl es on android problem with object opsition on projection matrix

java - 这会给出 128 位哈希值吗?

Android,存储大量文本(HTML)并通过它们进行搜索

arrays - Excel 2013 VBA Range.RemoveDuplicates 指定数组的问题

java - 将多个 Shiro Realm 集成到 Spring Boot 环境 Java

java - 我如何绘制 Java 中非常小的值?

android - 一个应用程序的最大线程数?