Android: запрос строки Volley onresponse не вызывается

Я пытаюсь отправить данные с android на php, используя метод POST

часть php проверяется сама по себе и работает на 100%, и она возвращает строку json как предполагаемую

часть андроида не работает, она не печатает ошибку или даже требуемый ответ

Вот код и он протестирован, печатая строку «test» с помощью Toast, но она не изменяется в коде волейбола 🙁

это код php:

<?php require_once(__DIR__.'/../dbConnect.php'); $userName=$_POST['username']; $query = "SELECT * FROM users WHERE username='$userName'"; $result = pg_query($con, $query); $rows = pg_num_rows($result); while ($row = pg_fetch_row($result)) { $field = pg_num_fields( $result ); for ( $i = 0; $i < $field; $i++ ) { $name = pg_field_name( $result, $i ); $user_arr[$name] = $row[$i]; } } echo json_encode($user_arr); pg_close($con); ?> 

и это код Android:

инициализация тестовой строки для вывода вывода

 String test = "none"; 

это то, где я называю метод

  setUserData(username); Toast.makeText(LoginActivity.this, test, Toast.LENGTH_SHORT).show(); 

и это метод:

  private void setUserData(final String username) { StringRequest strReq = new StringRequest(Request.Method.POST, Server.GET_USERDATA_URL, new Response.Listener<String>() { @Override public void onResponse(String response) { test= "test = "+response; } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { Toast.makeText(LoginActivity.this, volleyError.getMessage().toString(), Toast.LENGTH_LONG).show(); } }) { @Override protected Map<String, String> getParams() { // Posting parameters to getData url Map<String, String> params = new HashMap<String, String>(); params.put(Server.KEY_USERNAME, username); return params; } }; //Creating a Request Queue RequestQueue requestQueue = Volley.newRequestQueue(this); //Adding request to the queue requestQueue.add(strReq); } 

Solutions Collecting From Web of "Android: запрос строки Volley onresponse не вызывается"

У вас проблема параллелизма. Когда вы выполняете setUserData(username) Volley выполняет работу над фоновым потоком. Поэтому вам нужно подождать ответа, прежде чем вы сможете отобразить его в Toast. В тот момент, когда вы звоните:

 Toast.makeText(LoginActivity.this, test, Toast.LENGTH_SHORT).show(); 

Сервер все еще не ответил, и test прежнему не будет. Вам нужно вызвать тост из обратного вызова onResponse :

 private void setUserData(final String username) { StringRequest strReq = new StringRequest( Request.Method.POST, Server.GET_USERDATA_URL, new Response.Listener<String>() { @Override public void onResponse(String response) { test = "test = "+response; showToast(); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { Toast.makeText(LoginActivity.this, volleyError.getMessage().toString(), Toast.LENGTH_LONG).show(); } }) { @Override protected Map<String, String> getParams() { // Posting parameters to getData url Map<String, String> params = new HashMap<String, String>(); params.put(Server.KEY_USERNAME, username); return params; } }; //Creating a Request Queue RequestQueue requestQueue = Volley.newRequestQueue(this); //Adding request to the queue requestQueue.add(strReq); } private void showToast() { Toast.makeText(LoginActivity.this, test, Toast.LENGTH_SHORT).show(); } 

Проверьте, получили ли вы разрешение на Интернет.

Также добавьте тост в

 onResponse() Toast.makeText(LoginActivity.this, response.toString(), Toast.LENGTH_LONG).show();