Вы можете себе представить, что контекст определяет, ГДЕ / КОГДА БД sqlite существует.Базы данных sqlite не существуют сами по себе, они существуют в пределах вашей деятельности, то есть в контексте вашей деятельности.
для следующих шагов вы должны понимать, что контекст является динамической «вещью» (в действительности вымог представить это как-то ЗДЕСЬ и СЕЙЧАС).контекст индивидуален для действия и его момента, точно так же, как вы здесь и сейчас принадлежите только вам и вашему и изменяются со временем.
если вы вызываете класс изнутри вашей деятельности, то это делает свое дело (передача контекста активности изнутри самой деятельности в порядке - вроде как вы говорите своему приятелю: это то, как я себя чувствую СЕЙЧАС).
public class MyActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Context contextNew = this;
myClass(contextNew);
Простое универсальное решение (панацея) - создать статическую переменную контекста (contextVariable) внутри MyActivity и получить к ней доступ напрямую, используя: MyActivity.contextVariable.но это не работает, потому что вы получаете сообщение об ошибке при попытке объявить / использовать статическую переменную Context.
Итак, если вы планируете использовать sqlite внутри службы, которая НЕ вызывается из основной деятельности,как, например, служба, запускаемая широковещательным приемником (ни служба, ни получатель не имеют контекста как такового), тогда вы должны получить доступ к контексту исходного приложения из указанного получателя.
доступ к контексту исходного действия прост, но далеко не очевиден.
это работает для меня (спасибо @ZiGi и @Cristian):
import android.app.Service;
import android.content.Context;
public class BatchUploadGpsData extends Service {
public Context contextNew;
@Override
public void onCreate() {
contextNew = getApplicationContext();
этопример из рабочего кода, который загружает навигационные данные в базу данных в Интернете каждый раз, когда устройство Android подключается к сети WIFI.у меня есть получатель, слушающий изменения подключения (существующий в виде отдельного класса, называемого напрямую из файла манифеста).
Я надеюсь, что это имеет смысл, если вы хотите узнать больше об этом, посмотрите мой пост , где у меня есть полный (barebones) код для указанного получателя.