im trying this new method Ion. with PDO and I got stuck where I want to get value inside JsonObject. I previously used Volly with msqli but I find Ion. more organized and PDO more safe.
whenever I try to add any code to java its just break and don’t work as if no connection same with PHP so I got stuck
part where I’m stuck at is LOG_IN_SUCCESS as I need to get user id for session manager as $row doesn’t show in java only the case “LOG_IN_SUCCESS” i also added case”LOG_IN_SUCCESS “: case”0”:{code break;} but i didnt work
I tried to add new string for case”0″which contain user Id but code just break
java
private void loginbtn(final String email, final String password) {
Ion.with(getApplicationContext())
.load(HOST)
.setBodyParameter("susers_semails", email)
.setBodyParameter("susers_spasswords", password)
.asJsonObject()
.setCallback(new FutureCallback<JsonObject>() {
@Override
public void onCompleted(Exception e, JsonObject result) {
try {
String completed = result.get("LOGIN").getAsString();
switch (completed){
case "Email_Doesnt_Exist":
edtemail.setError("Email Doesnt Exist");
loginbtn.setVisibility(View.VISIBLE);
progressBar.setVisibility(View.GONE);
break;
case "Log_In_Success":
Intent intent = new Intent(LoginActivity.this, HomeSearchActivity.class);
startActivity(intent);
finish();
loginbtn.setVisibility(View.VISIBLE);
progressBar.setVisibility(View.GONE);
Toast.makeText(LoginActivity.this, completed, Toast.LENGTH_LONG);
Log.d(TAG, "onCompleted: " + completed);
break;
case "Log_In_Failed":
edtpassword.setError("Incorrect Password");
loginbtn.setVisibility(View.VISIBLE);
progressBar.setVisibility(View.GONE);
break;
default:
Toast.makeText(getApplicationContext(), "Ops! Error Occurred m", Toast.LENGTH_LONG).show();
loginbtn.setVisibility(View.VISIBLE);
progressBar.setVisibility(View.GONE);
break;
}
}catch (Exception error){
Toast.makeText(getApplicationContext(), "Please Check Connection And Try Again", Toast.LENGTH_LONG).show();
loginbtn.setVisibility(View.VISIBLE);
progressBar.setVisibility(View.GONE);
}
}
});
}
php
$susers_semails = $_POST['susers_semails'];
$susers_spasswords = $_POST['susers_spasswords'];
$stmt = $PDO->prepare("SELECT susers_sids,susers_semails,susers_spasswords FROM userstbl WHERE
susers_semails = :USER_EMAIL" );
$stmt->bindParam(':USER_EMAIL',$susers_semails);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if (!empty($row)) {
if (password_verify($susers_spasswords, $row['susers_spasswords'])) {
$returnApp = array( 'LOGIN' => 'Log_In_Success',$row);
echo json_encode($returnApp);
}
else {
$returnApp = array( 'LOGIN' => 'Log_In_Failed');
echo json_encode($returnApp);
}
} else {
$returnApp = array( 'LOGIN' => 'Email_Doesnt_Exist');
echo json_encode($returnApp);
}
JSON
{
0: {
susers_sids: "3"
},
LOGIN: "Log_In_Success"
}
Advertisement
Answer
$row
become an attribue of the object $returnApp
as an associative array. I think you try to pass only the suser_sids so it should be something like
$returnApp=array(
'LOGIN' => 'Log_In_Success',
'susers_sids' => $row['susers_sids']
);
so it will return as :
{
LOGIN: "Log_In_Success" ,
susers_sids: "3"
}
Alternatively you could use array_merge_recursive
to include the row within our object (as one associative array) but i won’t store/pass user password unless really necessary.
EDIT: Another way you can/should do it, is to create an actual object instead of using an assocaitive array. Something like this will create an anonymous object that you can pass to json_encode the same exact way you are doing now (welcome to OOP):
$returnAPP->LOGIN="Log_In_Success";
$returnAPP->susers_sids=$row['susers_sids'];
echo json_encode($returnApp);
You could even define such class but PHP being what it is, it will vreate the stdObject for you 😉