提问者:小点点

如何在android中从php发送json响应和fetch


在我的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() {

                             }
                         });

}

有人请让我知道我做错了什么,任何帮助将是感激的。

谢谢


共1个答案

匿名用户

我认为您的错误在json检查这个问题我希望您能找到解决方案
“expected BEGIN_OBJECT but was STRING at line 1 column 1”