I'm having a problem in Android Studio on how to request JSON Object.
My Logcat can only print String onResponse but not JSONObject value. I'm having a problem in line try{} inside AccessActivity.java
My code explanation as below.
I have these JSON Object output that I fetch from mysql database.
{
"access":"PA001",
"password":"123",
"fullname":"ARCADE",
"branch":"HQ",
"section":"MPR"
}
In my PHP code, this is how I fetch the data and encode it as JSON Object.
access.php
<?php
$conn = mysqli_connect("","","","");
if(
isset($_POST['access']) &&
isset($_POST['password'])
){
$access = $_POST['access'];
$password = $_POST['password'];
$sql = "SELECT * FROM table WHERE access = '$access' AND password = '$password' ";
$result = mysqli_query($conn, $sql);
if($result && mysqli_num_rows($result) > 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";
}
}
?>
But my problem occurs in Android Studio,
- I can't even print Log.e(TAG, "JSON Object =" + jsonObject);
- I can't intent JSON Object value into next activity.
Here's my code .
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<String>() {
@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<String, String> getParams() throws AuthFailureError {
Map<String, String> params = new HashMap<>();
params.put("access", etAccess.getText().toString());
params.put("password", etPassword.getText().toString());
return params;
}
};
MySingleton.getInstance(getApplicationContext()).addToRequestQueue(stringRequest);
}
});
}
}
UPDATE :
my logcat display this
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)
Appreciate if someone can help me to solve this problem. Thanks.
Try this.
In the AccessActivity
change
to
In the NextActivity
Edited
change
to
And according to your code. You need to make sure that your current Activity is
com.apps.test.AccessActivity
orcom.apps.test.AccessActivity
.Edited
change to
Your requesting a JsonObject? You seem to have a grasp on StringRequest, so ill keep it simple. Change your
StringRequest
to aJsonObjectRequest
.Problem :
As you can see in your logcat the response that you get from the server is
success_access{"access":"PA001","password":"123","fullname":"ARCADE","branch":"HQ","section":"HQ"}
First, this is not a valid
JSON
. Also, that is the value of theresponse
variable. Now, yourresponse.equals("success_access")
will never return true, and hence the code control will never enter theif
block.Solution :
Ideally, there should be no extra string like
success_access
, insted your response should be aJSON
object ALWAYS containing one specified field (theresult
feild for example). To show success, your JSON will look something like :And in case of failure :
And then your code should convert the
respose
string into aJSON
(your server code should make sure that it returns a valid JSON always) check for the value of theresult
field and proceed further.Quick Fix :
Change your code to :