Java:Android:Reformation 2响应代码为200,response.body为空

Java: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

我正在尝试构建一个Android应用程序,该应用程序使用Reformation 2、Realm和电影数据库API实现协同过滤算法。 在进行改装回调时,onResponse返回一个成功的状态代码(200),但从日志记录中我得到我的response.body().getResults返回null。我现在处于困境中,无法让它工作。我的ApiService似乎工作正常,我进行了其他改装回调,以获得导演、电影标题、电影发行日期。总之,这里有一些代码片段可能会有所帮助

APIService.java

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