как использовать getContentResolver в классе без активности?

мой класс выглядит так:

public class sendInformation{

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

но он говорит, что getContentResolver() не существует, я знаю, что мне нужен контекст или активность, чтобы сделать эту работу, но как мне получить правильный контекст здесь?

Ответ 1

Вам нужно будет отключить контекст, даже для класса ContentResolver нужен действительный контекст для создания экземпляра.

Самый простой способ - это аргумент метода:

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

И для вызова: (предполагая, что экземпляр класса, содержащего test и ваше имя активности - 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 - плохая практика, не делайте это без уважительной причины, и если у вас есть веская причина, будьте как можно более конкретными.

Ответ 2

Где-то между тем, где начинается ваше приложение (и у вас есть доступ к getApplicationContext()), и точкой, где вы вызываете test(), вам нужно передать Context в ваш класс sendInformation. Я бы посмотрел, на каком жизненном цикле ваш класс sendInformation и сравнить его с различными компонентами Android (Application, Activity, Fragment) и используйте соответствующий контекст:

  • Приложение: getApplicationContext()

  • Активность: это (поскольку действие расширяет контекст)

  • Фрагмент: getActivity()