我正在尝试从我的数据库中检索数据。我向这个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请求
答案 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"));
}
如果您还有问题,请告诉我