Java:Android:Reformation 2响应代码为200,response.body为空
我正在尝试构建一个Android应用程序,该应用程序使用Reformation 2、Realm和电影数据库API实现协同过滤算法。 在进行改装回调时,onResponse返回一个成功的状态代码(200),但从日志记录中我得到我的response.body().getResults返回null。我现在处于困境中,无法让它工作。我的ApiService似乎工作正常,我进行了其他改装回调,以获得导演、电影标题、电影发行日期。总之,这里有一些代码片段可能会有所帮助 APIService.javaJava:Android:Reformation 2响应代码为200,response.body为空,java,android,callback,retrofit,themoviedb-api,Java,Android,Callback,Retrofit,Themoviedb Api,我正在尝试构建一个Android应用程序,该应用程序使用Reformation 2、Realm和电影数据库API实现协同过滤算法。 在进行改装回调时,onResponse返回一个成功的状态代码(200),但从日志记录中我得到我的response.body().getResults返回null。我现在处于困境中,无法让它工作。我的ApiService似乎工作正常,我进行了其他改装回调,以获得导演、电影标题、电影发行日期。总之,这里有一些代码片段可能会有所帮助 APIService.java pac
package com.yannis.thesis.movierecommendationapp.api;
import com.yannis.thesis.movierecommendationapp.models.DirectorResponse;
import com.yannis.thesis.movierecommendationapp.models.GenreResponse;
import com.yannis.thesis.movierecommendationapp.models.Movie;
import com.yannis.thesis.movierecommendationapp.models.MovieResponse;
import com.yannis.thesis.movierecommendationapp.models.PrimaryMovieInfo;
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Path;
import retrofit2.http.Query;
public interface APIService {
@POST("/list")
Call<Movie> loadMovie();
@GET("movie/top_rated")
Call<MovieResponse> getTopRatedMovies(@Query("api_key") String apiKey);
@GET("movie/popular")
Call<MovieResponse> getPopularMovies(@Query("api_key") String apiKey);
@GET("movie/{id}")
Call<MovieResponse> getMovieDetails(@Path("id") int id, @Query("api_key") String apiKey);
@GET("search/movie")
Call<MovieResponse> getMovieByTitle(@Query("query") String title, @Query("api_key") String apiKey);
}
package com.yannis.thesis.movierecommendationapp.api;
导入com.yannis.thesis.movierecommendationapp.models.DirectorResponse;
导入com.yannis.thesis.movierecommendationapp.models.GenreResponse;
导入com.yannis.thesis.movierecommendationapp.models.Movie;
导入com.yannis.thesis.movierecommendationapp.models.MovieResponse;
导入com.yannis.thesis.movierecommendationapp.models.PrimaryMovieInfo;
2.电话;;
导入文件2.http.GET;
导入文件2.http.POST;
导入2.http.Path;
导入2.http.Query;
公共接口服务{
@职位(“/名单”)
调用loadMovie();
@获得(“电影/顶级电影”)
调用getTopRatedMovies(@Query(“api_key”)字符串apiKey);
@获得(“电影/流行”)
调用getPopularMovies(@Query(“api_key”)字符串apiKey);
@获取(“电影/{id}”)
调用getMovieDetails(@Path(“id”)int-id、@Query(“api_-key”)字符串apiKey);
@获取(“搜索/电影”)
调用getMovieByTitle(@Query(“Query”)字符串title,@Query(“api_key”)字符串apiKey);
}
MovieResponse.java
package com.yannis.thesis.movierecommendationapp.models;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
import java.util.List;
public class MovieResponse {
@SerializedName("page")
private Integer page;
@SerializedName("results")
private List<Movie> results;
@SerializedName("total_results")
private Integer totalResults;
@SerializedName("total_pages")
private Integer totalPages;
public Integer getPage() {
return page;
}
public void setPage(Integer page) {
this.page = page;
}
public List<Movie> getResults() {
return results;
}
public void setResults(List<Movie> results) {
this.results = results;
}
public Integer getTotalResults() {
return totalResults;
}
public void setTotalResults(Integer totalResults) {
this.totalResults = totalResults;
}
public Integer getTotalPages() {
return totalPages;
}
public void setTotalPages(Integer totalPages) {
this.totalPages = totalPages;
}
}
package com.yannis.thesis.movierecommendationapp.models;
导入com.google.gson.annotations.Expose;
导入com.google.gson.annotations.SerializedName;
导入java.util.List;
公共级电影责任{
@序列化名称(“页面”)
私有整数页;
@SerializedName(“结果”)
私人名单结果;
@SerializedName(“总结果”)
私有整数结果;
@序列化名称(“总页数”)
私有整数页;
公共整数getPage(){
返回页面;
}
公共无效设置页(整数页){
this.page=page;
}
公共列表getResults(){
返回结果;
}
公共void setResults(列出结果){
这个结果=结果;
}
公共整数getTotalResults(){
返回结果;
}
公共void setTotalResults(整数totalResults){
this.totalResults=totalResults;
}
公共整数getTotalPages(){
返回总页数;
}
公共void setTotalPages(整型totalPages){
this.totalPages=totalPages;
}
}
MovieRecommendationApp.java
package com.yannis.thesis.movierecommendationapp;
import android.app.Application;
import android.support.annotation.NonNull;
import android.support.v4.view.PagerAdapter;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;
import com.luseen.logger.LogType;
import com.luseen.logger.Logger;
import com.weiwangcn.betterspinner.library.BetterSpinner;
import com.yannis.thesis.movierecommendationapp.activities.BaseActivity;
import com.yannis.thesis.movierecommendationapp.activities.MainActivity;
import com.yannis.thesis.movierecommendationapp.api.APIService;
import com.yannis.thesis.movierecommendationapp.models.DirectorResponse;
import com.yannis.thesis.movierecommendationapp.models.DirectorResult;
import com.yannis.thesis.movierecommendationapp.models.Genre;
import com.yannis.thesis.movierecommendationapp.models.GenreResponse;
import com.yannis.thesis.movierecommendationapp.models.MainPagerEnum;
import com.yannis.thesis.movierecommendationapp.models.Movie;
import com.yannis.thesis.movierecommendationapp.models.MovieResponse;
import com.yannis.thesis.movierecommendationapp.models.MovieRecommendedForUser;
import com.yannis.thesis.movierecommendationapp.models.Recommendation;
import com.yannis.thesis.movierecommendationapp.models.User;
import com.yannis.thesis.movierecommendationapp.models.UserRatesMovie;
import com.yannis.thesis.movierecommendationapp.MovieRecommendationApp;
import com.yannis.thesis.movierecommendationapp.R;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import io.realm.Realm;
import io.realm.RealmConfiguration;
import io.realm.RealmQuery;
import io.realm.RealmResults;
import io.realm.Sort;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Headers;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.ResponseBody;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class MovieRecommendationApp extends Application {
private static MovieRecommendationApp instance;
public BaseActivity lastActivity;
String API_BASE_URL = "http://api.themoviedb.org/3/";
private final static String API_KEY = "******************";
private static Retrofit retrofitinstance;
private String loggedInUserId;
private Realm realm;
final Double SIMILARITY_PILLOW = 0.5;
final Double PREDICTION_PILLOW = 3.0;
private APIService client;
OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
Retrofit.Builder builder =
new Retrofit.Builder()
.baseUrl(API_BASE_URL)
.addConverterFactory(
GsonConverterFactory.create()
);
Retrofit retrofit =
builder
.client(
httpClient.build()
)
.build();
retrofit2.Call<MovieResponse> call;
@Override
public void onCreate() {
super.onCreate();
instance = this;
Realm.init(this);
RealmConfiguration config = new RealmConfiguration.Builder()
.name("myrealmDB.realm")
.deleteRealmIfMigrationNeeded()
.build();
Realm.setDefaultConfiguration(config);
new Logger.Builder()
.isLoggable(BuildConfig.DEBUG)
.logType(LogType.WARN)
.tag("Iamerror")
.build();
realm = Realm.getDefaultInstance();
MovieRecommendationAlgorithm();
}
public static MovieRecommendationApp getInstance() {
return instance;
}
public static Retrofit getRetrofitInstance() {
return retrofitinstance;
}
public static String getApiKey() {
return API_KEY;
}
public void MovieRecommendationAlgorithm() {
prediction("activeUserId","637",neighbours);
}
public void prediction(String activeUserId, String notYetRatedMovieId,ArrayList<String> neightbours) {
Double activeAVG = avgRating(activeUserId);
Double A = 0.0;
Double B = 0.0;
for (int i = 0; i < neightbours.size(); i++) {
avgRating(neightbours.get(i));
A = A + similarity(activeUserId, neightbours.get(i)) * (getUser_i_MovieRating(neightbours.get(i), notYetRatedMovieId) - avgRating(neightbours.get(i)));
B = B + similarity(activeUserId, neightbours.get(i));
}
final Double prediction = activeAVG + A / B;
if (prediction < PREDICTION_PILLOW) {
return;
}
int movieId = Integer.parseInt(notYetRatedMovieId);
client = retrofit.create(APIService.class);
call = client.getMovieDetails(movieId, MovieRecommendationApp.getApiKey());
call.enqueue(new retrofit2.Callback<MovieResponse>() {
@Override
public void onResponse(retrofit2.Call<MovieResponse> call, retrofit2.Response<MovieResponse> response) {
int statusCode = response.code();
if (response.isSuccessful() == false) {
Logger.w("unsuccessful w status", String.valueOf(statusCode));
} else {
//problem is in this spot
Logger.w( " reponse body is " + response.body().getResults());
}
// Logger.e("Number of movies received: " + movies.size());
}
@Override
public void onFailure(retrofit2.Call<MovieResponse> call, Throwable t) {
}
});
}
}
package com.yannis.thesis.movierecommendationapp;
导入android.app.Application;
导入android.support.annotation.NonNull;
导入android.support.v4.view.PagerAdapter;
导入android.support.v7.widget.DefaultItemAnimator;
导入android.support.v7.widget.LinearLayoutManager;
导入android.support.v7.widget.RecyclerView;
导入android.util.Log;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.AdapterView;
导入android.widget.ArrayAdapter;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.Spinner;
导入android.widget.Toast;
导入com.luseen.logger.LogType;
导入com.luseen.logger.logger;
导入com.weiwangcn.betterspinner.library.betterspinner;
导入com.yannis.thesis.movierecommendationapp.activities.BaseActivity;
导入com.yannis.thesis.movierecommendationapp.activities.MainActivity;
导入com.yannis.thesis.movierecommendationapp.api.APIService;
导入com.yannis.thesis.movierecommendationapp.models.DirectorResponse;
导入com.yannis.thesis.movierecommendationapp.models.DirectorResult;
导入com.yannis.thesis.movierecommendationapp.models.Genre;
导入com.yannis.thesis.movierecommendationapp.models.GenreResponse;
导入com.yannis.thesis.movierecommendationapp.models.MainPagerEnum;
导入com.yannis.thesis.movierecommendationapp.models.Movie;
导入com.yannis.thesis.movierecommendationapp.models.MovieResponse;
为用户导入com.yannis.thesis.movierecommendationapp.models.movierecommendedf;
导入com.yannis.thesis.movierecommendationapp.models.Recommendation;
导入com.yannis.thesis.movierecommendationapp.models.User;
导入com.yannis.thesis.movierecommendationapp.models.UserRatesMovie;
import com.yannis.thesis.movierecommendationapp.movierecommendationapp;
import com.yannis.thesis.movierecommendationapp.R;
导入java.io.IOException;
导入java.util.ArrayList;
导入java.util.array;
导入java.util.Date;
导入java.util.HashMap;
导入java.util.LinkedList;
导入java.util.List;
导入java.util.Map;
导入butterknife.BindView;
进口毛刀,毛刀;
进口butterknife.OnClick;
导入io.realm.realm;
导入io.realm.RealmConfiguration;
导入io.realm.RealmQuery;
导入io.realm.RealmResults;
导入io.realm.Sort;
导入okhttp3.Call;
导入okhttp3.Callback;
导入okhttp3.Headers;
导入okhttp3.OkHttpClient;
导入okhttp3.请求;
导入okhttp3.响应;
进口okhttp3.0响应电子书;
进口改装2.改装;
进口改装2.converter.gson.GsonConverterFactory;
公共类MovieRecommendationApp扩展了应用程序{
私有静态MovieRecommendationApp实例;
公共活动;
字符串API_BASE_URL=”http://api.themoviedb.org/3/";
私有最终静态字符串API_KEY=“*******************”;
私人静态改装实例;
私有字符串loggedInUserId;
私人领域;
最终双重相似性=0.5;
最终双预测值=3.0;
私人服务客户;
OkHttpClient.Builder httpClient=新建OkHttpClient.Builder();
改装.建筑商=
新的改型.Builder()
.baseUrl(
@GET("movie/{id}")
Call<MovieResponse> getMovieDetails(@Path("id") int id, @Query("api_key") String apiKey);