¿Cómo mostrar / solicitar objeto JSON con Android Volley?

Tengo un problema en Android Studio sobre cómo solicitar el objeto JSON.

Mi Logcat solo puede imprimir String onResponse pero no el valor de JSONObject. Estoy teniendo un problema en la línea try {} dentro de AccessActivity.java

Mi explicación de código como a continuación.

Tengo estos resultados de objetos JSON que obtengo de la base de datos mysql.

{ "access":"PA001", "password":"123", "fullname":"ARCADE", "branch":"HQ", "section":"MPR" } 

En mi código PHP, así es como busco los datos y los codigo como Objeto JSON.

access.php

  0){ while($row = mysqli_fetch_array($result)){ $accessdb = $row['access']; $passworddb = $row['password']; $fullnamedb = $row['fullname']; $branchdb = $row['branch']; $sectiondb = $row['section']; echo "success_access"; $response = array('access' => $accessdb, 'password' => $passworddb, 'fullname' => $fullnamedb, 'branch' => $branchdb, 'section' => $sectiondb); echo json_encode($response); } mysqli_free_result($result); } else { echo "access_failed"; } } ?> 

Pero mi problema ocurre en Android Studio,

  1. Ni siquiera puedo imprimir Log.e (TAG, “JSON Object =” + jsonObject);
  2. No puedo intentar el valor del objeto JSON en la siguiente actividad.

Aquí está mi código.

AccessActivity.java

 public class AccessActivity extends AppCompatActivity{ final String TAG = this.getClass().getName(); EditText etAccess, etPassword; Button bLogin; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); etAccess = (EditText)findViewById(R.id.etAccess); etPassword = (EditText)findViewById(R.id.etPassword); bLogin = (Button)findViewById(R.id.bLogin); bLogin.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String url = "http://localhost/access.php"; StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener() { @Override public void onResponse(String response) { Log.e(TAG, "Response is = " + response); if(response.equals("success_access")){ try { JSONObject jsonObject = new JSONObject(response); Log.e(TAG, "JSON Object is = " + jsonObject); final String accessdb = jsonObject.getString("access"); final String passworddb = jsonObject.getString("password"); final String fullnamedb = jsonObject.getString("fullname"); final String branchdb = jsonObject.getString("branch"); final String sectiondb = jsonObject.getString("branch"); Intent intent = new Intent(AccessActivity.this, NextActivity.class); intent.putExtra("access", accessdb); intent.putExtra("password", passworddb); intent.putExtra("fullname", fullnamedb); intent.putExtra("branch", branchdb); intent.putExtra("section", sectiondb); AccessActivity.this.startActivity(intent); } catch (JSONException e) { e.printStackTrace(); } } else{ Toast.makeText(getApplicationContext(), "Access Error", Toast.LENGTH_SHORT).show(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Toast.makeText(getApplicationContext(), "Volley Error", Toast.LENGTH_SHORT).show(); } }){ @Override protected Map getParams() throws AuthFailureError { Map params = new HashMap(); params.put("access", etAccess.getText().toString()); params.put("password", etPassword.getText().toString()); return params; } }; MySingleton.getInstance(getApplicationContext()).addToRequestQueue(stringRequest); } }); } } 

ACTUALIZAR:

mi logcat muestra esto

 08-22 10:22:22.059 19801-19908/com.apps.test D/NetworkSecurityConfig: No Network Security Config specified, using platform default 08-22 10:22:22.064 19801-19801/com.apps.test E/my.com.apps.test.Activity: Response is = success_access{"access":"PA001","password":"123","fullname":"ARCADE","branch":"HQ","section":"HQ"} 08-22 10:22:22.112 19801-19825/com.apps.test D/EGL_emulation: eglMakeCurrent: 0xb3305060: ver 2 0 (tinfo 0xb3303200) 08-22 10:22:22.128 19801-19825/com.apps.test D/EGL_emulation: eglMakeCurrent: 0xb3305060: ver 2 0 (tinfo 0xb3303200) 08-22 10:22:22.134 19801-19825/com.apps.test D/EGL_emulation: eglMakeCurrent: 0xb3305060: ver 2 0 (tinfo 0xb3303200) 08-22 10:22:22.140 19801-19825/com.apps.test D/EGL_emulation: eglMakeCurrent: 0xb3305060: ver 2 0 (tinfo 0xb3303200) 08-22 10:22:23.697 19801-19825/com.apps.test D/EGL_emulation: eglMakeCurrent: 0xb3305060: ver 2 0 (tinfo 0xb3303200) 08-22 10:22:25.751 19801-19825/com.apps.test D/EGL_emulation: eglMakeCurrent: 0xb3305060: ver 2 0 (tinfo 0xb3303200) 08-22 10:22:25.780 19801-19825/com.apps.test D/EGL_emulation: eglMakeCurrent: 0xb3305060: ver 2 0 (tinfo 0xb3303200) 

Apreciar si alguien puede ayudarme a resolver este problema. Gracias.

Prueba esto.

En AccessActivity

  Intent intent = new Intent(AccessActivity.this, NextActivity.class); intent.putExtra("access", accessdb); intent.putExtra("password", passworddb); intent.putExtra("fullname", fullnamedb); intent.putExtra("branch", branchdb); intent.putExtra("section", sectiondb); AccessActivity.this.startActivity(intent); 

cambio

 LoginActivity.this.startActivity(intent); 

a

 AccessActivity.this.startActivity(intent); 

En la actividad siguiente

 Intent intent = getIntent(); String access = intent.getStringExtra("access"); String password = intent.getStringExtra("password"); String fullname = intent.getStringExtra("fullname"); String branch = intent.getStringExtra("branch"); String section = intent.getStringExtra("section"); 

Editado

cambio

 if(response.equals("success_access")){ } 

a

 if(response.contains("success_access")){ } 

Y de acuerdo a tu código. Debe asegurarse de que su actividad actual sea com.apps.test.AccessActivity o com.apps.test.AccessActivity .

Editado

cambiar a

 if (response.contains("success_access")) { String res = response.substring(response.indexOf("{")); try { JSONObject jsonObject = new JSONObject(res); final String accessdb = jsonObject.getString("access"); final String passworddb = jsonObject.getString("password"); final String fullnamedb = jsonObject.getString("fullname"); final String branchdb = jsonObject.getString("branch"); final String sectiondb = jsonObject.getString("branch"); Log.e("Tag", accessdb); } catch (JSONException e) { e.printStackTrace(); } } 

¿Está solicitando un JsonObject? Parece que tiene una comprensión de StringRequest, por lo que lo mantengo simple. Cambia tu StringRequest a JsonObjectRequest .

Problema:

Como puede ver en su logcat, la respuesta que obtiene del servidor es success_access{"access":"PA001","password":"123","fullname":"ARCADE","branch":"HQ","section":"HQ"}

Primero, este no es un JSON válido. Además, ese es el valor de la variable de response . Ahora, sus response.equals("success_access") nunca volverán a ser verdaderas, y por lo tanto el control de código nunca ingresará al bloque if .

Solución:

Idealmente, no debería haber ninguna cadena adicional como success_access , success_access su respuesta debería ser un objeto JSON SIEMPRE que contenga un campo específico (el campo de result por ejemplo). Para mostrar el éxito, su JSON se verá algo así como:

 { result : "success_access", /* other parameters down here */ } 

Y en caso de falla:

 { result : "access_failed" } 

Y luego su código debe convertir la cadena de respose en un JSON (su código de servidor debe asegurarse de que siempre devuelve un JSON válido) verifique el valor del campo de result y continúe.

Arreglo rapido :

Cambia tu código a:

  .... Log.e(TAG, "Response is = " + response); String result = response.replace("{.*}",""); String jsonString = response.replace(result, ""); if(result.equals("success_access")){ try { JSONObject jsonObject = new JSONObject(jsonString); ....