Я хочу передать моему серверу id, и он сделает мне запрос и отправлю мне некоторую информацию, но похоже, что сервер не поймает значение, которое я отправляю. здесь есть мой код:Android volley library, method return null object
private void makeJsonObjectRequest() {
JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.GET,
Config.url_info, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.d("INFO RESPONSE: ", response.toString());
try {
int success = response.getInt(TAG_SUCCESS);
if(success == 1) {
// successfully received details
JSONArray infoObj = response.getJSONArray(TAG_INFO); // JSON Array
// get first course object from JSON Array
info = infoObj.getJSONObject(0);
showResult();
}
}catch (JSONException e){
e.printStackTrace();
Toast.makeText(getApplicationContext(),"Error: " + e.getMessage(),
Toast.LENGTH_LONG).show();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.d("VOLLEY ERROR: ", "Error: " + error.getMessage());
Toast.makeText(getApplicationContext(),
error.getMessage(), Toast.LENGTH_SHORT).show();
}
}){
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String,String> params = new HashMap<>();
//Adding parameters to request
params.put("id", id);
//returning parameter
return params;
}
};
// Adding request to request queue
//AppController.getInstance().addToRequestQueue(jsonObjReq);
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(jsonObjReq);
}
Ошибка в переменной информации, журнал ошибок говорят, что нулевое значение. «java.lang.NullPointerException: попытка вызвать виртуальный метод„java.lang.String org.json.JSONObject.getString (java.lang.String)“на нулевой объект»
Здесь есть мой PHP-код :
<?php
// array for JSON response
$response = array();
// include db connect class
require_once __DIR__ . '/db_connect.php';
//include query class
require_once __DIR__ . '/query.php';
// connecting to db
$db = new DB_CONNECT();
// check for post data
if (isset($_GET["id"])) {
$id = $_GET['id'];
// get a product from products table
$result = $db ->sth -> query("SELECT * FROM info WHERE id = $id");
if (!empty($result)) {
// check for empty result
if (mysqli_num_rows($result) > 0) {
$result = mysqli_fetch_array($result);
$dett = array();
$dett["where"] = $result["where"];
$dett["when"] = $result["when"];
$dett["cost"] = $result["cost"];
$dett["link"] = $result["link"];
// success
$response["success"] = 1;
// user node
$response["info"] = array();
array_push($response["info"], $dett);
// echoing JSON response
echo json_encode($response);
} else {
// no product found
$response["success"] = 0;
$response["message"] = "No course found";
// echo no users JSON
echo json_encode($response);
}
} else {
// no product found
$response["success"] = 0;
$response["message"] = "No course found";
// echo no users JSON
echo json_encode($response);
}
} else {
// required field is missing
$response["success"] = 0;
$response["message"] = "Required field(s) is missing";
// echoing JSON response
echo json_encode($response);
}
?>
Спасибо за чтение.
Редактировать. Я попытался изменить свой php-файл, если я задал переменную $ id с определенным номером, который он работает, поэтому, возможно, проблема может быть в $ _get для php (но я не думаю, потому что раньше я использовал старую библиотеку, и она работала), Я попытался вставить тост-сообщение в метод карты, но он не отображался. экран остается белым, а значение успеха 0
Я пытался, но он не работает, я изменил положение showResult() метод, не так ли не сбой, но успех il 0, php не достигает идентификатора, который я передаю из метода getParam(). – Daniel
попробуйте запустить php-код, чтобы увидеть результат. – Joe
Я добавил ваш код вверху php-файла в $ varibale1. Я добавил «1», а в переменной 2 добавил «успех», вывод: { "ответ": [{ "успех": "1", "сообщение": "успех"}]} { "0": { "успех": "1", "сообщение": "успех"}, "успех" : 0, «message»: «Обязательные поля отсутствуют»} – Daniel