2016-05-14 6 views
1

Я разрабатываю свое первое приложение в Android Studio. У меня есть два класса. Один, содержащий настройки.Что делать, если у меня нет контекста?

public class settings { 
    private int przed_termin; 
    private int przed_po_otwarciu; 
    private boolean powiadomienia; 
    private ustawienia_sql ustawienia_baza; 
} 

И второй, который отвечает за чтение и сохранение их в базе данных SQLite. И теперь я пытаюсь создать объект settings_sql в settings, но для этого мне нужен Context. И есть ли возможность преодолеть это?

public class settings_sql extends SQLiteOpenHelper { 
    public settings_sql (Context context) { 
     super(context, "ustawienia.db", null, 1); 
    } 
} 
+2

, чтобы просто сохранить эти несколько значений, используйте SharedPrefernces –

+0

Либо передайте контекст как параметр, либо получите его из вашей базы. –

ответ

1

Я собираюсь ive вы немного понимаете тогда код. Контекст является распространенным разочарованием для новых Android-программистов.

На самом деле существует 4 различных типа объектов контекста. Это важно знать. Обычно, если вы выполняете пользовательские элементы управления, вам нужен контекст Activity, в котором находится пользовательский элемент управления. Ответ на этот вопрос будет работать. В основном контекстный объект является объектом Activity. Существуют также экземпляры экземпляра службы, которые имеют контекст службы.

Другой тип контекста - это контекст приложения.

Это, как вы убедитесь, что любой класс в вашем приложении имеет доступ к контексту приложения:

Создать класс, как это. Это статически хранит ссылку на это сам с аксессору:

public class MyApp extends Application{ 
    private static Context applicationContext; 

    public void onCreate() { 
     applicationContext = this; 
    } 

    public static Context getApplicationContext() { 
     return applicationContext; 
    } 
} 

Измените ApplicationManifest.xml включить имя атрибута в вашем приложении тег:

<application 
    android:name="MyApp" 
    android:allowBackup="true" 
    android:icon="@drawable/icon" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme"> 
    <activity...... 
</application> 

Тогда везде, где требуется объект контекста и дон «т иметь один Convient использование:

MyApp.getApplicationContext() 

Например:

settings_sql(MyApp.getApplicationContext()); 

Поскольку вы создаете в классе приложения oncreate, вы можете быть уверены, что он никогда не будет пустым, а в вашем приложении.

0

В вашем MainActivity сделать что-то вроде:

private static Context context; 

public void onCreate() { 
     super.onCreate(); 
     context = getApplicationContext(); 
    } 

Затем, когда вы делаете вызов просто передать контекст в

+0

его значение в ситуации неактивности – Hosseini

0

Самое простое решение, чтобы иметь класс приложений в вашем APK и. добавьте к нему статический метод для извлечения контекста, например:

public class MyApplication extends Application { 
private static MyApplication sInstance = null; 

@Override 
public void onCreate() { 
    super.onCreate(); 
    sInstance = this; 
} 

public static Context getContext() { 
    return sInstance.getApplicationContext(); 
} 
1

Я рекомендую передать контекст классам, которые в этом нуждаются. У вас уже есть свой конструктор settings_sql(Context context), который является хорошим началом.

В вашем основном коде приложения вы можете легко передать Контекст из своей деятельности или приложения в зависимости от ваших потребностей, а также от фактического времени жизни объекта settings_sql. Должен ли этот объект жить вне продолжительности одного действия?

Если вы затем решите написать тесты, вы свободны в зависимости от статической переменной, хранящейся в произвольном классе, который может не иметь особого отношения к вашему тесту.Почему, например, местный модульный тест должен знать о классе Application?

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

Смежные вопросы