// 根据用户的id,获得用户的所有电影
 public ArrayList<MovieInfo> getMovieByUserId(long userID) {
   ArrayList<MovieInfo> movieList = new ArrayList<MovieInfo>();
   try {
     String sql =
         "select m.name,m.published_year,m.type,mp.preference from movie_preferences mp,movies m where mp.movieID=m.id and mp.userID="
             + userID
             + " order by preference desc";
     conn = ConnectToMySQL.getConnection();
     ps = conn.prepareStatement(sql);
     rs = ps.executeQuery();
     while (rs.next()) {
       MovieInfo movieInfo = new MovieInfo();
       movieInfo.setName(rs.getString(1));
       movieInfo.setPublishedYear(rs.getString(2));
       movieInfo.setType(rs.getString(3));
       movieInfo.setPreference(rs.getInt(4));
       movieList.add(movieInfo);
     }
   } catch (Exception e) {
     // TODO: handle exception
     e.printStackTrace();
   } finally {
     closeAll();
   }
   return movieList;
 }
 // 根据推荐的movie的ID,获得movie的详细信息
 public ArrayList<MovieInfo> getMovieByMovieId(List<RecommendedItem> recommendations) {
   ArrayList<MovieInfo> movieList = new ArrayList<MovieInfo>();
   try {
     String sql = "";
     conn = ConnectToMySQL.getConnection();
     for (int i = 0; i < recommendations.size(); i++) {
       sql =
           "select m.name,m.published_year,m.type from movies m where m.id="
               + recommendations.get(i).getItemID()
               + "";
       ps = conn.prepareStatement(sql);
       rs = ps.executeQuery();
       while (rs.next()) {
         MovieInfo movieInfo = new MovieInfo();
         movieInfo.setName(rs.getString(1));
         movieInfo.setPublishedYear(rs.getString(2));
         movieInfo.setType(rs.getString(3));
         movieInfo.setPreference(recommendations.get(i).getValue());
         movieList.add(movieInfo);
       }
     }
   } catch (Exception e) {
     // TODO: handle exception
     e.printStackTrace();
   } finally {
     closeAll();
   }
   return movieList;
 }
 @Override
 public void synchronizeMovie(String movieId, List<MovieInfo> movieInfoList) {
   Movie movie = this.entityManager.find(MovieImpl.class, movieId);
   if (movie != null) {
     List<? extends MovieInfo> existMovieInfoList = movie.getInfo();
     loop:
     for (MovieInfo movieInfo : movieInfoList) {
       if (existMovieInfoList != null && !existMovieInfoList.isEmpty()) {
         for (MovieInfo existMovieInfo : existMovieInfoList) {
           if (existMovieInfo.getProviderName().equalsIgnoreCase(movieInfo.getProviderName())) {
             continue loop;
           }
         }
       }
       // Not exist in databased
       movie.addInfo(movieInfo);
     }
     this.entityManager.merge(movie);
   }
 }
  // 根据推荐的movie的ID,获得movie的详细信息
  public ArrayList<MovieInfo> getMovieByMovieId(int id) {
    ArrayList<MovieInfo> movieList = new ArrayList<MovieInfo>();
    try {
      conn = ConnectToMySQL.getConnection();
      String sql = "select m.name,m.published_year,m.type from movies m where m.id=" + id + "";
      ps = conn.prepareStatement(sql);
      rs = ps.executeQuery();
      while (rs.next()) {
        MovieInfo movieInfo = new MovieInfo();
        movieInfo.setName(rs.getString(1));
        movieInfo.setPublishedYear(rs.getString(2));
        movieInfo.setType(rs.getString(3));
        movieInfo.setPreference(5.0);
        movieList.add(movieInfo);
      }

    } catch (Exception e) {
      // TODO: handle exception
      e.printStackTrace();
    } finally {
      closeAll();
    }
    return movieList;
  }
  @Override
  protected List<MovieInfo> doInBackground(String... params) {
    // Decode sorting preference from param[0]
    String sortby =
        (params[0].equals(associatedAdapter.getContext().getString(R.string.pref_sort_popular))
            ? "popularity.desc"
            : params[0].equals(associatedAdapter.getContext().getString(R.string.pref_sort_rating))
                ? "vote_average.desc"
                : "");

    List<MovieInfo> movieInfos = null;
    try {
      // Build URI for querying TheMovieDB
      Uri builtUri =
          Uri.parse(TMDB_BASE_URL)
              .buildUpon()
              .appendPath(TMDB_DISCOVER_PARAM1)
              .appendPath(TMDB_DISCOVER_PARAM2)
              .appendQueryParameter(TMDB_SORT, sortby)
              .appendQueryParameter(TMDB_KEY, MY_KEY)
              .build();
      URL url = new URL(builtUri.toString());
      // Log.v(LOG_TAG, "TMDB movie info url: " + url.toString());

      // Call TMDB
      String jsonString = doCallJson(url);

      // Loop through result and populate movie info
      movieInfos = new ArrayList<MovieInfo>();
      JSONObject json = new JSONObject(jsonString);
      JSONArray jArray = json.getJSONArray("results");
      for (int i = 0; i < jArray.length(); i++) {
        JSONObject oneMovie = jArray.getJSONObject(i);

        MovieInfo movieInfo = new MovieInfo();
        movieInfo.imageUrl = TMDB_IMAGE_URL + oneMovie.getString("poster_path");
        movieInfo.originalTitle = ensureGoodString(oneMovie.getString("original_title"));
        movieInfo.plotSynopsis = ensureGoodString(oneMovie.getString("overview"));
        movieInfo.rating = ensureGoodString(oneMovie.getString("vote_average"));
        movieInfo.releaseDate = ensureGoodString(oneMovie.getString("release_date"));

        movieInfos.add(movieInfo);

        // Log.v(LOG_TAG, "Added movie: " + movieInfo.originalTitle);
      }
    } catch (Exception e) {
      Log.e(LOG_TAG, "Error", e);
    }
    return movieInfos;
  }
 @Override
 public int compareTo(final MovieInfo otherMovieInfo) {
   return getTitle().compareTo(otherMovieInfo.getTitle());
 }