Модификация - сетевой вызов приводит к зависанию приложения - PullRequest
0 голосов
/ 21 сентября 2018

Я не могу выполнить сетевой вызов с помощью Retrofit, и это приводит к зависанию приложения.Ниже мой код:

RegisterUserApi:

public interface RegisterUserApi
{
    @FormUrlEncoded
    @POST("register.php")
    Call<RegisterUserData> registerUser(
            @Field("email") String email,
            @Field("password") String password
    );
}

RegisterUserData:

public class RegisterUserData
{
    @SerializedName("value")
    private String value;
    @SerializedName("email")
    private String email;

    public RegisterUserData() {}

    public String getValue() {
        return value;
    }
    public void setValue(String value) {
        this.value = value;
    }

    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
}

RegisterActivity:

Gson gson = new GsonBuilder().setLenient().create();
Retrofit retrofit = new Retrofit.Builder()
    .baseUrl("https://www.website.com/")
    .addConverterFactory(GsonConverterFactory.create(gson))
    .build();

RegisterUserApi registerApi = retrofit.create(RegisterUserApi.class);
System.out.println("inside 1");
Call<RegisterUserData> registerUserDataCall = registerApi.registerUser(email, password);
System.out.println("inside 2");
registerUserDataCall.enqueue(new Callback<RegisterUserData>() {
    @Override
    public void onResponse(@NonNull Call<RegisterUserData> call, retrofit2.Response<RegisterUserData> response) {
        try
        {

        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
    @Override
    public void onFailure(@NonNull Call<RegisterUserData> call, @NonNull Throwable t) {
        t.printStackTrace();
    }
});

Теперь при вызове этой функции вRegisterActivity, logcat печатает «внутри 1», но не «внутри 2» и вызывает зависание приложения.

Я понятия не имею, что именно происходит, и я также не получаю никаких ошибок в logcat.

Может кто-нибудь помочь мне в этом?

gradle:

implementation 'com.squareup.retrofit2:retrofit:2.4.0'
implementation 'com.squareup.retrofit2:converter-gson:2.4.0'

Также я заметил одну вещь, если я изменю имена файлов RegisterUserApi и RegisterUserData на что-то другое,это может начать работать.Я понятия не имею, почему это так

У меня есть такой же набор файлов для входа в систему, который отлично работает.

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Просто добавьте эту строку в AndroidManifest.xml

android:usesCleartextTraffic="true" в теге приложения

0 голосов
/ 21 сентября 2018

Вы можете попытаться отправить @Body или @ Path.

public interface RegisterUserApi
{
    @FormUrlEncoded
    @POST("register.php")
    Call<RegisterUserData> registerUser(
        @Path("email") String email,
        @Path("password") String password
);
}

или

 public interface RegisterUserApi
{
    @FormUrlEncoded
    @POST("register.php")
    Call<RegisterUserData> registerUser(@Body("userInfo") ModelUserInfo mui);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...