2017-07-21 6 views
0

Je crée une application de film à l'aide de l'API tmdb. J'utilise retrofit pour aller chercher les données. J'ai vérifié que mon api-key fonctionne parfaitement bien. Mais les données de TMDb ne sont pas récupérées.Android: les données JSON ne sont pas extraites de l'hôte de l'API TMdb

Voici mon interface 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); 
} 

méthode constructeur Rénovation

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

J'ai une autre classe Interface Builder et la modernisation utilise l'API OMDB fonctionne parfaitement bien est Ci-dessous API OMDB Interface

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

et la classe de mise à niveau

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

S'il vous plaît aidez-moi à résoudre ce problème!

Répondre

0

vous ne devriez pas commencer votre URL avec «/» au lieu mettre dans votre URL de base

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

public interface MoviesAPI { 

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

ci-dessus le changement fait l'url parfait pour vous, essayez.

+0

Merci pour la réponse. J'ai corrigé le code comme suggéré, mais je n'ai toujours pas pu récupérer les données. La réponse montre faux. – Suhas

1

Votre interface API devrait ressembler à ceci:

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

Notez que le paramètre de requête est api_key & pas apikey.

méthode @GET doit être déclarée comme tout ce horsBASE_URL qui sera:

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