【问题标题】:whenever i acces data from network using retrofit it works fine but in 2nd time can't find data through network using retrofit每当我使用改造从网络访问数据时,它都可以正常工作,但第二次使用改造无法通过网络找到数据
【发布时间】:2020-08-14 16:09:24
【问题描述】:

我正在尝试使用改造从网络访问数据(数据是 gson 的形式,我正在使用 WordPress REST API),但无法访问。它向我显示了一个错误,例如 data is null 看起来改造无法找到数据,但一切都很好......看起来代码很好,我不知道如何解决这个问题。请帮助我,我是一名新开发人员.. 我需要 3 天时间

每当我调用 getRetrofit() 方法时,它都可以正常工作...但是当我调用 getImageRetrofit() 时,看起来此方法不起作用...此方法返回 null 值,如 logcat 所示: ImageInfo: info: null

   private void getRetrofit() {
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(baseUrl)
            .addConverterFactory(GsonConverterFactory.create())
            .build();
    RetrofitArrayApi service = retrofit.create(RetrofitArrayApi.class);
    Call<List<WPPost>> call = service.getPostInfo();
    call.enqueue(new Callback<List<WPPost>>() {
        @Override
        public void onResponse(Call<List<WPPost>> call, Response<List<WPPost>> response) {
            Log.e("Latest","response: "+response.body());
            for (int i=0; i<response.body().size(); i++)
            {
                Log.e("main ","title "+response.body().get(i).getTitle().getRendered() + " " +
                        response.body().get(i).getId() );
                String tempDate = response.body().get(i).getDate();
                tempDate = tempDate.replace("T"," ");

                String tempImageHref = response.body().get(i).getLinks().getWpFeaturedmedia().get(0).getHref();
                Log.e("Href", "onResponse: "+tempImageHref);
                String link = response.body().get(i).getLink();
                Log.e("PostLink",link);

                getImageRetrofit(tempImageHref);


                list.add(new LatestModel(
                        response.body().get(i).getTitle().getRendered(),
                        tempDate,
                        tempImageHref,
                        LatestModel.IMAGE_TYPE,
                        response.body().get(i).getLink()
                        )
                );
            }
            adapter.notifyDataSetChanged();
        }

        @Override
        public void onFailure(Call<List<WPPost>> call, Throwable t) {
            t.printStackTrace();
        }
    });

}



private void getImageRetrofit(String ImageHref) {
    Log.e("getImageRetrofit","called "+ImageHref);
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(baseUrl)
            .addConverterFactory(GsonConverterFactory.create())
            .build();

    RetrofitArrayApi service = retrofit.create(RetrofitArrayApi.class);
    Call<List<WPPostImage>> callImage = service.getImageInfo(ImageHref);
    callImage.enqueue(new Callback<List<WPPostImage>>() {
        @Override
        public void onResponse(Call<List<WPPostImage>> call, Response<List<WPPostImage>> response) {

            Log.e("ImageInfo","info: "+response.body());
        }

        @Override
        public void onFailure(Call<List<WPPostImage>> call, Throwable t) {
        Log.e("Link Failed: ",": t.printStackTrace()" );
        }
    });


}

这是我的 RetrofitArrayApi 接口:

public interface RetrofitArrayApi {
@GET("wp-json/wp/v2/posts?per_page=4")
Call<List<WPPost>> getPostInfo();

@GET("{id}")
Call<List<WPPostImage>> getImageInfo(@Path("id") String ImageHref);     }

【问题讨论】:

  • 当您从浏览器或邮递员等访问getImageInfo api 时,后端会返回什么?
  • 此链接存储:in temImageHref:mubashirsaddique.com/wp-json/wp/v2/media/1780
  • 在 logcat 中显示如下:E/ImageInfo: info: null...我也仔细检查了我的 pojo 模型,这也是正确的
  • 这是我的baseurl:private String baseUrl = "mubashirsaddique.com";
  • 如果 temImageHref 等于 mubashirsaddique.com/wp-json/wp/v2/media/1780service.getImageInfo(ImageHref) 向 baseurl + temImageHref 发出请求 = mubashirsaddique.com/mubashirsaddique.com/wp-json/wp/v2/media/1780

标签: java android wordpress retrofit


【解决方案1】:

您在 cmets 上说过 temImageHref: mubashirsaddique.com/wp-json/wp/v2/media/1780 以及您的基本网址是 baseUrl = "mubashirsaddique.com"。因此,当您致电 getImageInfo 时,您会向该地址 mubashirsaddique.com/mubashirsaddique.com/wp-json/wp/v2/media/1780 发送请求。

更改您的getPostInfo 服务。它应该只返回 id(在您的情况下为 1780)作为 href 值并修改 RetrofitArrayApi

@GET("wp-json/wp/v2/media/{id}")
Call<List<WPPostImage>> getImageInfo(@Path("id") String ImageHref); 

【讨论】:

  • 我就是这样用的。 ImageHref = ImageHref.replace("mubashirsaddique.com/wp-json/wp/v2/media/",""); Log.e("newImageHref",ImageHref);
  • @GET("wp-json/wp/v2/media/{id}") 调用> getImageInfo(@Path("id") String ImageHref);
  • logcat: E/newImageHref: 1780
  • 错误:E/Link Failed:: : t.printStackTrace()
  • 你能把onFailure改成这样:Log.e("Link Failed: ", t.getMessage()); t.printStackTrace();
猜你喜欢
  • 2013-05-13
  • 2020-08-15
  • 2019-03-16
  • 2015-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多