Cześć ! Mam problem ! Otóż niedawno zacząłem uczyć się używać biblioteki Retrofit ( dotychczas używałem Volley ). Mój JSON jest poprawny ( sprawdzałem go )
Wyskakuje mi taki błąd:
E/MainActivity: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $
JSON:
{
"statusOfLogin": 1,
"id": "2"
}
MainActivity:
public void onClick(View view)
{
EditText usernameET = findViewById(R.id.usernameET);
EditText passwordET = findViewById(R.id.passwordET);
String username = usernameET.getText().toString();
String password = passwordET.getText().toString();
final RequestModel requestModel = new RequestModel();
requestModel.setUsername(username);
requestModel.setPassword(password);
Gson gson = new GsonBuilder()
.setLenient()
.create();
final Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
WebAPIInterface webAPIInterface = retrofit.create(WebAPIInterface.class);
webAPIInterface.login(requestModel).enqueue(new Callback<ResponseModel>() {
@Override
public void onResponse(Call<ResponseModel> call, Response<ResponseModel> response) {
if(response.isSuccessful())
{
Log.v(TAG, "Response is successful !!!");
Gson gson = new GsonBuilder()
.setLenient()
.create();
gson.fromJson(response.toString(), ResponseModel.class);
}
else
{
Log.v(TAG, "Response isn't successful !!!");
}
}
@Override
public void onFailure(Call<ResponseModel> call, Throwable t) {
Log.e(TAG, t.toString());
}
});
}
ResponseModel:
public class ResponseModel {
@SerializedName("statusOfLogin")
@Expose
private Integer statusOfLogin;
@SerializedName("id")
@Expose
private Integer id;
// gettery i settery
RequestModel:
public class RequestModel
{
@SerializedName("username")
private String username;
@SerializedName("password")
private String password;
WebAPIInterface:
public interface WebAPIInterface
{
@POST("retrofitLogin.php")
Call<ResponseModel> login(@Body RequestModel requestModel);
}
Kod PHP po stronie serwera:
<?php
require "connect.php";
$response = array();
$username = $_POST["username"];
$password = $_POST["password"];
$mysql_qry = "SELECT `Haslo` FROM `dane_logowania` WHERE `Login` = '$username'";
$result = mysqli_query($conn ,$mysql_qry);
$data = $result->fetch_array();
if(password_verify($password, $data['Haslo']))
{
$qry = "SELECT `ID` FROM `dane_logowania` WHERE `Login` = '$username'";
$res = mysqli_query($conn, $qry);
$data1 = $res->fetch_array();
$response["statusOfLogin"] = 1;
$response["id"] = $data1["ID"];
echo json_encode($response);
}
else
{
$response["statusOfLogin"] = 0;
$response["id"] = 0;
echo json_encode($response);
}
?>
Jak to naprawić ?
I jeszcze jedno pytanie.
Czy ten POST jest dobrze wykonany ( w sensie czy do skryptu są przekazane dane z klasy RequestModel )?