响应错误:: java.lang.IllegalStateException:预期 BEGIN_OBJECT 但在第 1 行第 1 列路径 $ 处为 STRING

Response error :: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $

我正在 android 中进行用户身份验证。我正在传递用户名和密码,但出现此错误。 API 工作正常任何帮助将不胜感激 谁能告诉我做错了

这是我遇到的错误 android

[![在此处输入图片描述][1]][1]

登录活动

public class Login extends AppCompatActivity {    
     private String email,password;
    private EditText emailET;
    private EditText passwordET;
    private Button loginButton,createAccount;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    emailET = findViewById(R.id.editTextUname);
    passwordET = findViewById(R.id.editTextPassword);

    loginButton = findViewById(R.id.loginButton);
    createAccount = findViewById(R.id.createaccountButton);

    loginButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            userAuth();
        }
    });

    createAccount.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(Login.this,SignUp.class);
            startActivity(i);
        }
    });
}

private void userAuth() {

    VidlyEndPoint vidlyEndPoint = RetrofitInstance.getService().create(VidlyEndPoint.class);

    email = emailET.getText().toString();
    password = passwordET.getText().toString();

    JsonObject requestBody = new JsonObject();
    requestBody.addProperty("email",email );
    requestBody.addProperty("password",password );

    Log.e("Response", String.valueOf(requestBody));

    //        User user = new User(email, password);

    Call<User> call = vidlyEndPoint.authUser(requestBody) ;

    final Intent dash = new Intent(getApplicationContext(),dashboard.class);

    call.enqueue(new Callback<User>() {
        @Override
        public void onResponse(Call<User> call, Response<User> response) {
            if (!response.isSuccessful()) {
                Toast.makeText(getApplicationContext(),"Invalid Email or Password", Toast.LENGTH_SHORT).show();
                Log.e("Response NS :", String.valueOf(response.code()));
            }

            else if(response.code() == 200){
                Toast.makeText(getApplicationContext(), response.body().toString(), Toast.LENGTH_SHORT).show();
                startActivity(dash);
            }
        }

        @Override
        public void onFailure(Call<User> call, Throwable t) {
            Log.e("Response error :", t.getMessage());
        }
    });
}


}

预期输出: JSON 代币

你得到这个异常是因为你想要一个 object 作为响应,但你得到的实际 response 是一个 string.

您必须将 server response 更改为 JSON 或将 API 服务中的 response type 更改为字符串。

试试这个,字符串响应不是用户

Call<String> call = vidlyEndPoint.authUser(requestBody) ;

    final Intent dash = new Intent(getApplicationContext(),dashboard.class);

    call.enqueue(new Callback<String>() {
        @Override
        public void onResponse(Call<String> call, Response<String> response) {
            if (!response.isSuccessful()) {
                Toast.makeText(getApplicationContext(),"Invalid Email or Password", Toast.LENGTH_SHORT).show();
                Log.e("Response NS :", String.valueOf(response.code()));
            }

            else if(response.code() == 200){
                Toast.makeText(getApplicationContext(), response.body().toString(), Toast.LENGTH_SHORT).show();
                startActivity(dash);
            }
        }

        @Override
        public void onFailure(Call<String> call, Throwable t) {
            Log.e("Response error :", t.getMessage());
        }
    });
}

Response<User> 替换为 Response<ResponseBody>