在非活动类比较器中获取上下文

时间:2015-02-01 11:58:16

标签: java android comparator android-context

我必须从我的一个实体类中的比较器类访问我的数据库。 为了实现数据库连接的实例化,我需要一个应用程序上下文。

在这种情况下如何获取应用程序上下文:

实体 - 带比较器的类

static public class CowLastInspectionComparator implements Comparator<Cow> {
    public int compare(Cow cow1, Cow cow2) {
        DbAdapter adapter = DbAdapter.getInstance(new MainView().getApplicationContext()); //this doesn't work
        List<Inspection> inspectionsCow1 = adapter.getInspectionByCow(cow1);
        List<Inspection> inspectionsCow2 = adapter.getInspectionByCow(cow2);

        return inspectionsCow1.get(0).getJob().getJobDate().compareTo(inspectionsCow2.get(0).getJob().getJobDate());
    }
}

在活动中排序:

 if (sortOption == "Name") Collections.sort(cows, new Cow.CowLastInspectionComparator());

2 个答案:

答案 0 :(得分:2)

static public class CowLastInspectionComparator implements Comparator<Cow> {
  private Context context;
  CowLastInspectionComparator(Context context){
    this.context=context;
  }
  public int compare(Cow cow1, Cow cow2) {
    DbAdapter adapter = DbAdapter.getInstance(context); //this doesn't work
    List<Inspection> inspectionsCow1 = adapter.getInspectionByCow(cow1);
    List<Inspection> inspectionsCow2 = adapter.getInspectionByCow(cow2);

    return inspectionsCow1.get(0).getJob().getJobDate().compareTo(inspectionsCow2.get(0).getJob().getJobDate());
  }
}

在活动中:

 if (sortOption == "Name"){
    Cow.CowLastInspectionComparator comparator=new Cow.CowLastInspectionComparator(this);
    Collections.sort(cows,comparator);
 } 

答案 1 :(得分:0)

  

我必须从我的一个实体类

中的比较器类访问我的数据库

如果这意味着你想要在compare()中进行数据库I / O,这会使compare()来电变慢,而sort()来电非常< / strong>慢。如果你想对你的,嗯,奶牛进行排序,并且它们不在内存中,那么使用ORDER BY子句进行单个数据库查询,以使它们正确排序。

  

为了实例化数据库连接,我需要一个应用程序上下文。

您需要Context。它不一定是Application

  

在这种情况下如何获取应用程序上下文

CowLastInspectionComparator提供一个,例如通过构造函数参数。