尝试从数据库

时间:2017-05-25 09:39:54

标签: php android mysql json

我正在尝试从我的数据库中检索数据。我向这个PHP文件发送请求:

<?php

    require "init.php";

    $qrcode = $_POST["qrcode"];

    $sql = "select * from cespite where QrCode = $qrcode;";

    $result = mysqli_query($con, $sql);

    if(mysqli_num_rows($result)==0)
    {
        $code = "reg_failed";
        $message = "Nessun risultato trovato!";

        $err = array("code"=>$code, "message"=>$message);
        echo json_encode($err);
    }
    else
    {
        $row = $result->fetch_all(MYSQLI_ASSOC)[0];
        echo json_encode($row);
    }

    //$mysqli_close($con);

?>

这是我将请求发送到该文件的代码:

final JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, url, null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response)
            {
                try
                {
                    Nome.setText(response.getString("Nome"));
                    Descrizione.setText(response.getString("Descrizione"));
                    Numinventario.setText(response.getString("NumInventario"));
                    Foto.setText(response.getString("Foto"));
                    Dtcatalogazione.setText(response.getString("DtCatalogazione"));
                }
                catch (JSONException e)
                {
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                int j = 21;
            }
        })
        {
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String, String> params = new HashMap<>(1);
                params.put("qrcode", richiesta);

                return params;
            }
        };

        RegisterRequest.getmInstance(this).addToRequestque(request);

这是我的RegisterRequest课程:

public class RegisterRequest
{
    private static RegisterRequest mInstance;
    private RequestQueue requestQueue;
    private static Context mCtx;
    //default constructor
    private RegisterRequest(Context context)
    {
        mCtx=context;
        requestQueue=getRequestQueue();
    }

    public RequestQueue getRequestQueue()
    {
        if(requestQueue==null)
        {
            requestQueue = Volley.newRequestQueue(mCtx);
        }
        return requestQueue;
    }

    public static synchronized RegisterRequest getmInstance(Context context)
    {
        if(mInstance==null)
        {
            mInstance = new RegisterRequest(context);
        }
        return mInstance;
    }

    public void addToRequestque(Request request)
    {
        requestQueue.add(request);
    }

}

我试过我的调试器。我总是用onErrorResponse方法完成,我无法弄清楚为什么,因为我试图从网上发送请求到我的PHP文件并且它正常工作,所以我认为这可能是一个发送问题请求的参数。 我得到的错误是Value <br of type java.lang.String cannot be converted to JSONObject

任何解决方案?

提前致谢!

编辑:解决了发出字符串请求而不是jsonobject请求

2 个答案:

答案 0 :(得分:0)

PHP脚本出错,导致输出如下:

ERROR AT LINE X: INFORMATION ABOUT THE ERROR

{"code": "code", "message": "Something went wrong"}

这会导致整体输出无效JSON(因为第一个ERROR行不是JSON)。这会导致您收到的JSON异常。尝试验证您的PHP脚本是否正在工作,例如将其与标准文本请求而不是JSONRequest联系。这样您就应该看到发生的PHP错误。您还可以尝试查看服务器日志,看看那里是否有用。

另一方面,您的PHP脚本容易受到SQL注入攻击。试着看看如果用引号替换$_POST['qrcode']的值会发生什么(例如:')。这样,有恶意意图的人就可以获得整个数据库。您可以使用预准备语句解决此问题。

答案 1 :(得分:0)

尝试制作合适的jsonObject

if(mysqli_num_rows($result)==0)
{

$array = array();

$array[] = "reg_failed";
$array[] = "reg_failed";"Nessun risultato trovato!";

$get = array("error" => $array);

header('Content-type: application/json');
echo json_encode($get);
}else{

$array = array();
while($row = mysqli_fetch_assoc($result))
{
$array[] = $row;
}
$get = array("alldata" => $array);

header('Content-type: application/json');
echo json_encode($get);

}

这是解析jsonObject的java代码

JSONArray jsonArray = response.getJSONArray("alldata");

JSONObject jsonObj = jsonArray.getJSONObject(0);

if (jsonObj.getString("Nome") != null) {

Nome.setText(jsonObj.getString("Nome"));
Descrizione.setText(jsonObj.getString("Descrizione")); 
Numinventario.setText(jsonObj.getString("NumInventario"));
Foto.setText(jsonObj.getString("Foto"));
Dtcatalogazione.setText(jsonObj.getString("DtCatalogazione"));
}

如果您还有问题,请告诉我