首页 > 解决方案 > 改造 - 网络调用导致应用程序挂起

问题描述

我无法使用 Retrofit 进行网络调用,这会导致应用程序冻结。下面是我的代码:

注册用户接口:

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

注册用户数据:

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;
    }
}

注册活动:

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 正在打印“inside 1”而不是“inside 2”并导致应用程序冻结。

我不知道到底发生了什么,我也没有在 logcat 中收到任何错误。

有人可以帮我吗?

毕业典礼:

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

我还注意到的一件事是,如果我将 RegisterUserApi 和 RegisterUserData 文件名更改为其他名称,它可能会开始工作。我不知道为什么会这样

我也有相同的登录文件集,效果很好。

标签: androidretrofitretrofit2

解决方案


只需在 AndroidManifest.xml 中添加这一行

android:usesCleartextTraffic="true"在应用程序标签中


推荐阅读