12

我的课看起来像这样:

public class sendInformation{

  public void test() throws Exception {
    Uri uri = SuspiciousActivityTable.CONTENT_URI;
    getContentResolver().update(uri, values2, where,new String[]{"Null"});
    }
  }
}

但它说不 getContentResolver()存在,我知道我需要一个上下文或活动来完成这项工作,但我如何在这里获得正确的上下文?

4

2 回答 2

28

您将需要传递一个上下文,即使ContentResolver该类也需要一个有效的上下文才能被实例化。

最简单的方法是作为方法的参数:

public void test(Context context) throws Exception {
    Uri uri = SuspiciousActivityTable.CONTENT_URI;
    context.getContentResolver().update(uri, values2, where,new String[]{"Null"});
  }

并调用:(假设包含的类test已实例化并且您的 Activity 的名称是MyActivity<- 替换为Activity您调用test() 名称)

try{
    sendInformationInstanceVariable.test (MyActivity.this);
}
catch (Exception e)
{
 e.printStackTrace();
}

MyActivity.this可以缩短为仅this 您不是test()从匿名内部类内部调用时。

此外,如果您的类确实没有充分的理由实例化,请考虑创建test()一个static方法,如下所示:

public static void test(Context context) throws Exception {
        Uri uri = SuspiciousActivityTable.CONTENT_URI;
        context.getContentResolver().update(uri, values2, where,new String[]{"Null"});
      }

然后从您的Activity,您无需实例即可调用此方法:

try{
    sendInformation.test (MyActivity.this);
}
catch (Exception e)
{
 e.printStackTrace();
}

最后,投掷Exception是不好的做法,不要没有充分的理由这样做,如果你有充分的理由,请尽可能具体。

于 2013-02-25T22:47:34.220 回答
9

在您的应用程序开始(并且您可以访问getApplicationContext())和您调用的点之间的某个地方test(),您需要将 a 传递Context给您的sendInformation班级。我会查看您的 sendInformation 类的生命周期,并将其与各种 Android 组件(应用程序、活动、片段)进行比较,并从那里使用适当的上下文:

  • 应用:getApplicationContext()

  • 活动:this(作为活动扩展上下文)

  • 分段:getActivity()
于 2013-02-25T22:48:22.203 回答