void saveUrl(String s) {
    SharedPreferences prefs =
        getSharedPreferences(getString(R.string.preference_file_key), Context.MODE_PRIVATE);
    ArrayList<String> urls = new ArrayList<String>();
    try {
      urls =
          (ArrayList<String>)
              ObjectSerializer.deserialize(
                  prefs.getString(
                      getString(R.string.preference_file_key),
                      ObjectSerializer.serialize(new ArrayList<String>())));
    } catch (IOException e) {
      e.printStackTrace();
    }
    if (!urls.contains(s)) urls.add(s);

    // save the url list to preferences
    SharedPreferences.Editor editor = prefs.edit();
    try {
      editor.putString(getString(R.string.preference_file_key), ObjectSerializer.serialize(urls));
    } catch (IOException e) {
      e.printStackTrace();
    }
    editor.commit();
  }
  private static String train(
      SQLContext sqlContext, DataFrame positives, DataFrame negatives, String modelFileName) {
    // combine data sets
    DataFrame all = positives.unionAll(negatives);

    // split into training and test sets
    DataFrame[] split = all.randomSplit(new double[] {.80, .20}, 1);
    DataFrame training = split[0].cache();
    DataFrame test = split[1].cache();

    // fit logistic regression model
    PipelineModel model = fitLogisticRegressionModel(training);

    try {
      ObjectSerializer.serialize(model, modelFileName);
    } catch (IOException e1) {
      // TODO Auto-generated catch block
      e1.printStackTrace();
    }

    // predict on training data to evaluate goodness of fit
    DataFrame trainingResults = model.transform(training).cache();

    // predict on test set to evaluate goodness of fit
    DataFrame testResults = model.transform(test).cache();

    // predict on unassigned data mentions

    StringBuilder sb = new StringBuilder();
    sb.append(getMetrics(trainingResults, "Training\n"));

    sb.append(getMetrics(testResults, "Testing\n"));

    return sb.toString();
  }