在我的android项目中,我使用php作为后端,在android方面,我使用retrofit2和Rxjava2从服务器获取数据。我在postman中测试了我的localhost api,运行良好,但当我试图在android中获取数据时,它显示以下异常:
java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $
我的php代码:
<?php
require_once('dbconfig.php');
$uid = $_POST['uid'];
$name = $_POST['name'];
$email = $_POST['email'];
$res = new stdClass();
$row = "SELECT * FROM users WHERE email = '$email'";
$row_result = mysqli_query($con,$row);
if(mysqli_num_rows($row_result) > 0){
$res->message = "User exists";
header('Content-type: application/json');
echo json_encode($res);
}
else{
$sql = "INSERT INTO `users` (`userid`, `name`, `email`)
VALUES ('$uid', '$name', '$email')";
$result = mysqli_query($con,$sql);
if($result){
$res->message = "User created";
header('Content-type: application/json');
echo json_encode($res);
}
else{
$res->message = "Unable to authenticate";
header('Content-type: application/json');
echo json_encode($res);
}
exit();
}
?>
来自web的响应:
{
"message": "User exists"
}
APIService.class
@POST("Users.php")
@FormUrlEncoded
Observable<LoginResponse> saveUser(@Field("userid") String userid,
@Field("name") String name,
@Field("email") String email );
LoginResponse.class
public class LoginResponse {
@SerializedName("message")
@Expose
String message;
public LoginResponse(){
}
public LoginResponse(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
login.class
private void saveData(){
user = fAuth.getCurrentUser();
String uid = user.getUid();
String name = user.getDisplayName();
String email = user.getEmail();
Retrofit retrofit = RetrofitClient.getInstance();
ApiService mapiService = retrofit.create(ApiService.class);
mapiService.saveUser(userid,name,email).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<LoginResponse>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(LoginResponse loginResponse) {
prg.dismiss();
String res = loginResponse.getMessage();
Toast.makeText(getApplicationContext(),res,Toast.LENGTH_SHORT).show();
}
@Override
public void onError(Throwable e) {
prg.dismiss();
TastyToast.makeText(getApplicationContext(),e.getMessage(),
TastyToast.LENGTH_LONG,TastyToast.ERROR).show();
Log.d("err",e.getMessage().toString());
}
@Override
public void onComplete() {
}
});
}
有人请让我知道我做错了什么,任何帮助将是感激的。
谢谢
我认为您的错误在json检查这个问题我希望您能找到解决方案
“expected BEGIN_OBJECT but was STRING at line 1 column 1”