【问题标题】:Android: Json data is not retrieving from TMdb API hostAndroid:未从 TMdb API 主机检索 Json 数据
【发布时间】:2023-04-08 05:43:01
【问题描述】:

我正在使用 tmdb API 构建电影应用程序。我正在使用改造来获取数据。我已经验证了我的 api-key 工作正常。但是没有从 TMDb 获取数据。

这是我的 API 接口

import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Query;

public interface MoviesAPI {

@GET("/movie/popular")
 Call<MovieBean> getPopular(@Query("apikey")String key);
}

改造建造者方法

public void getPopularMovies() {

    OkHttpClient client = new OkHttpClient.Builder().build();
   final String api_key = getString(R.string.tmdb_api_key);
   final String BASE_URL = "http://api.themoviedb.org/3/";

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(BASE_URL)
            .addConverterFactory(GsonConverterFactory.create()).build();

    MoviesAPI service = retrofit.create(MoviesAPI.class);
    Call<MovieBean> call = service.getPopular(api_key);
    call.enqueue(new Callback<MovieBean>() {
        @Override
        public void onResponse(Call<MovieBean> call, Response<MovieBean> response) {
            Log.d("movietest", "onResponse() tmdb, response_success? -" + response.isSuccessful());
        }

        @Override
        public void onFailure(Call<MovieBean> call, Throwable t) {
            Toast.makeText(getApplicationContext(), "Couldn't fetch data!", Toast.LENGTH_LONG).show();
        }
    });
}

我有另一个接口和改造构建器类使用 OMdb API 工作得很好 以下是 OMDb API 接口

import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Query;

public interface MoviesAPI2 {
   @GET("/")
   public Call<MovieBean2> getInfo(@Query("apikey")String omdbkey, 
             @Query("t")String movName,@Query("plot") String plot);
}

和改造类

 private static Retrofit obj = null;
public static final String BASE_URL = "http://www.omdbapi.com/?";

public static Retrofit getInstance(){
    //Interceptor httpLogging = new
    OkHttpClient client = new OkHttpClient.Builder().build();
    if(obj==null){
        obj = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
    }
    return obj;
}

 public void search_movie() {


         final String PLOT = "full";
        Log.d("movietest", "entered input " + title);
        // I get title from searchView
        Retrofit retrofit = RetrofitBuilder.getInstance();
        MoviesAPI2 service = retrofit.create(MoviesAPI2.class);
        Call<MovieBean2> call = service.getInfo(getString(R.string.omdb_api_key), title,PLOT);
        call.enqueue(new Callback<MovieBean2>() {
            @Override
            public void onResponse(Call<MovieBean2> call, Response<MovieBean2> response) {
                Log.d("movietest", "onResponse(),success" + response.isSuccessful());
                mBean = response.body();

                tvTit.setText(mBean.getTitle());
                tvDesc.setText(mBean.getPlot());
                tvactors.setText(mBean.getActors());
                Picasso.with(getApplicationContext()).load(mBean.getPoster()).into(imagView);
                Picasso.with(getApplicationContext()).load(mBean.getPoster()).into(imgView);
                Log.d("movietest", "onResponse(), bean 2=" + mBean);
            }

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

                Toast.makeText(getApplicationContext(),"Could not fetch.Please try again later!",Toast.LENGTH_LONG).show();
                //t.printStackTrace();
            }
        });
    } 

请帮我解决这个问题!

【问题讨论】:

    标签: android retrofit2 android-json


    【解决方案1】:

    您的 API 接口应如下所示:

    import retrofit2.Call;
    import retrofit2.http.GET;
    import retrofit2.http.Query;
    
    public interface MoviesAPI {
    
    @GET("3/movie/popular")
        Call<MovieBean> getPopular(@Query("api_key") String key);
    }
    

    请注意,查询参数是api_key 而不是apikey

    @GET 方法需要像这样声明一切不包括 BASE_URL 这将是:

    final String BASE_URL = "http://api.themoviedb.org";
    

    【讨论】:

      【解决方案2】:

      你不应该用“/”开始你的网址,而是把它放在你的基本网址中

      import retrofit2.Call;
      import retrofit2.http.GET;
      import retrofit2.http.Query;
      
      public interface MoviesAPI {
      
      @GET("movie/popular")
       Call<MovieBean> getPopular(@Query("apikey")String key);
      }
      

      以上更改为您提供了完美的网址,试试吧。

      【讨论】:

      • 感谢您的回答。我按照您的建议更正了代码,但仍然无法获取数据。响应显示为假。
      【解决方案3】:

      我做到了,你可以在 github 上查看我的应用程序——shivam141296/moviesapi。 base_url = "http://api.themoviedb.org/3/";

      @GET("电影/热门") 调用 getPopular(@Query("api_key") String apikey);

      【讨论】:

        猜你喜欢
        • 2015-01-05
        • 1970-01-01
        • 2021-01-13
        • 2020-04-04
        • 2013-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多