Ошибка дооснащения: ожидается BEGIN_OBJECT, но в строке 1 столбца 1 указано STRING - PullRequest
0 голосов
/ 06 марта 2020

Я пытаюсь решить эту ошибку, но не могу найти решение, чтобы решить мою проблему, так как я перепробовал все приведенные ссылки, поэтому я должен прийти сюда.

Я пытаюсь зарегистрировать пользователя, но не могу. Пожалуйста, помогите мне, поскольку эта проблема уже заняла весь мой день. Заранее спасибо.

Мой ApiClient. Java здесь

    public class ApiClient {

    private static final String BASE_URL = "http://IPAdress/foldername/";
    private static Retrofit retrofit = null;

   private static Gson gson = new GsonBuilder()
            .setLenient()
            .create();

    public static Retrofit getApiClient(){

        if (retrofit==null){
            retrofit=new Retrofit.Builder()
                    .baseUrl(BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create(gson))
                    .build();
        }
        return retrofit;
    }

Пользователь. Java класс

public class User {

@SerializedName("response")
private String Response;

@SerializedName("name")
private String Name;

public String getResponse() {
    return Response;
}

public String getName() {
    return Name;
}

MainActivity

public static SessionManager sessionManager;

EditText Name, Email, Password;
Button btn_register, btn_login;

String name, email, password;

Boolean CheckEditText;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_register);

    sessionManager = new SessionManager(this);

    //if the user is already logged in we will directly start the Profile Fragment
    if (sessionManager.readLoginStatus()) {
        startActivity(new Intent(this, ProfileFragment.class));
        finish();
    }
    Name = findViewById(R.id.username);
    Email = findViewById(R.id.useremail);
    Password = findViewById(R.id.userpassword);
    btn_register = findViewById(R.id.btnRegister);
    btn_login = findViewById(R.id.btnLinkToLoginScreen);

    btn_register.setOnClickListener(v -> {
        CheckEditTextIsEmptyOrNot();
        if (CheckEditText) {
            registration();
        } else {
            Toast.makeText(RegisterActivity.this, "Please fill all form fields.", Toast.LENGTH_SHORT).show();
        }
    });

    btn_login.setOnClickListener(v -> {
        Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
        startActivity(intent);
    });
}

public void CheckEditTextIsEmptyOrNot() {

    name = Name.getText().toString().trim();
    email = Email.getText().toString().trim();
    password = Password.getText().toString().trim();

    // Checking whether EditText value is empty or not.
    // If any of EditText is empty then set variable value as False.
    // If any of EditText is filled then set variable value as True.
    CheckEditText = !TextUtils.isEmpty(name) && !TextUtils.isEmpty(email) && !TextUtils.isEmpty(password);
}


private void registration() {

    ApiInterface apiInterface = ApiClient.getApiClient().create(ApiInterface.class);
    Call<User> call = apiInterface.performRegistration(name, email, password);
    call.enqueue(new Callback<User>() {
        @Override
        public void onResponse(@NonNull Call<User> call, @NonNull Response<User> response) {

            assert response.body() != null;
            switch (response.body().getResponse()) {
                case "ok":
                    RegisterActivity.sessionManager.displayToast("Registration Success...");
                    break;
                case "exist":
                    RegisterActivity.sessionManager.displayToast("User Already Exist...");
                    break;
                case "error":
                    RegisterActivity.sessionManager.displayToast("Something Went Wrong...");
                    break;
            }
        }

        @Override
        public void onFailure(@NonNull Call<User> call, @NonNull Throwable t) {

            Log.d("onFailure", t.toString());
            Toast.makeText(RegisterActivity.this, t.getMessage(), Toast.LENGTH_SHORT).show();
        }
    });

Вот JSON Я получаю

1 Ответ

0 голосов
/ 06 марта 2020

Создайте такой класс, как этот

public class MyResponse {
  @SerializedName("response")
  private String response;
  //Constructor
  //GET and SET
}

Тогда ваш сервис должен вернуть Call<MyResponse>, а затем проверить тело, как вы делаете, он должен работать.

...