【问题标题】:response is null in android retrofit 2 with param and header在带有参数和标头的 android 改造 2 中响应为空
【发布时间】:2018-12-18 10:22:59
【问题描述】:

当我运行应用程序并填写电子邮件/密码时,它显示空响应(response.body() != null && response.isSuccessful()) 当我登录时,onFailure() 不显示任何内容,onResponse() 显示空。我该如何解决这个问题?

MainApi,

public final class MainApi {

    private static String BASE_URL = "http://www.eg.com/";

    private static Retrofit.Builder builder = new Retrofit.Builder()
            .baseUrl(BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .client(new OkHttpClient());

    public MainApi() {
    }

    public static <S> S createService(Class<S> serviceClass) {
        Retrofit retrofit = builder.build();
        return retrofit.create(serviceClass);
    }
}

MainService 接口,

public interface MainService {

    @Headers({"Content-Type: application/json", "Authorization: Bearer fafafafafafa"})
    @FormUrlEncoded
    @POST("auth")
    Call<Auth> postAuth(@Field("email") String email,
                        @Field("password") String password;
}

活动,

Call<Auth> call = MainApi.createService(MainService.class).postAuth(edt_email.getText().toString(), edt_password.getText().toString());

【问题讨论】:

  • 你应该整合HttpLoggingInterceptor来检测正在发生的事情
  • 你的响应码是什么?
  • @ArbenMaloku 当call.enqueue , @Override public void onResponse(Call&lt;Auth&gt; call, Response&lt;Auth&gt; response)
  • @PPL 通常你必须得到一个响应码see here。您可以使用这段代码response.code() 获取此代码,当您得到它时,请在此处发布,也许我们可以帮助您。

标签: android json api retrofit2 response


【解决方案1】:
  public final class MainApi {

        private static String BASE_URL = "http://www.eg.com/";
        private static MainService api;//added line
        private static Retrofit.Builder builder;

         public static MainService get(){
           if(builder== null){
            builder = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .client(getClient());
                 api = builder.build().create(MainService.class);//add this line 
         }

        return api;
         }

        //Add this code
        private static OkHttpClient getClient() {
            HttpLoggingInterceptor logging = new HttpLoggingInterceptor();

            logging.setLevel(HttpLoggingInterceptor.Level.BODY);
            return new OkHttpClient.Builder()
                    .addInterceptor(logging)
                    .connectTimeout(120, TimeUnit.SECONDS)
                    .readTimeout(120, TimeUnit.SECONDS)
                    .writeTimeout(120, TimeUnit.SECONDS).build();
        }


        public MainApi() {
        }

        public static <S> S createService(Class<S> serviceClass) {
            Retrofit retrofit = builder.build();
            return retrofit.create(serviceClass);
        }
        }

【讨论】:

  • 他正在使用它看到这一行---> MainApi.createService(MainService.class)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-17
  • 1970-01-01
  • 2016-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-17
相关资源
最近更新 更多