J'ai créé un programme, avec un service - le service est "START_STICKY". Donc, quand je ferme le programme (j'utilise Advanced Task Killer, pour tuer des programmes) le service redémarre automatiquement, mais cela pose un problème parce que je reçois une erreur lorsque vous essayez d'appeler:Android SQLite ContextWrapper.openOrCreateDatabase() nullpointer?
ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203) (see stacktrace below).
J'ai créé un classe pour gérer le contexte, qui renverra le contexte de mon activité si elle n'est pas nulle, ou un faux que j'ai créé si le contexte de l'activité est nul - et le contexte de l'activité est nul, donc le faux est utilisé , mais je n'en ai aucune idée. Dans mon activité j'ai un constructeur qui donne une référence de lui-même à la classe contexthandling
, mais il semble que l'activité n'est pas instanciée (pas avant que le service soit démarré au moins) quand le système redémarre mon service.
Il n'y a bien sûr aucun problème lorsque le programme est démarré normalement, le service démarre alors bien; ce qui est la raison pour laquelle je soupçonnais le contexte faux, je l'ai créé comme suit (et il est référencé dans la balise d'application manifeste avec android:name=FakeContext
):
public class FakeContext extends android.app.Application
{
private static FakeContext m_instance = null;
public FakeContext()
{
}
public static synchronized Context getContext()
{
if(m_instance == null)
{
m_instance = new FakeContext();
}
return m_instance;
}
}
Stacktrace:
11-18 19:12:14.048: ERROR/AndroidRuntime(15655): FATAL EXCEPTION: main
11-18 19:12:14.048: ERROR/AndroidRuntime(15655): java.lang.RuntimeException: Unable to create service sdo.GeoTracker.Services.DataService: java.lang.NullPointerException
11-18 19:12:14.048: ERROR/AndroidRuntime(15655): at android.app.ActivityThread.handleCreateService(ActivityThread.java:3140)
11-18 19:12:14.048: ERROR/AndroidRuntime(15655): at android.app.ActivityThread.access$3300(ActivityThread.java:135)
11-18 19:12:14.048: ERROR/AndroidRuntime(15655): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2202)
11-18 19:12:14.048: ERROR/AndroidRuntime(15655): at android.os.Handler.dispatchMessage(Handler.java:99)
11-18 19:12:14.048: ERROR/AndroidRuntime(15655): at android.os.Looper.loop(Looper.java:144)
11-18 19:12:14.048: ERROR/AndroidRuntime(15655): at android.app.ActivityThread.main(ActivityThread.java:4937)
11-18 19:12:14.048: ERROR/AndroidRuntime(15655): at java.lang.reflect.Method.invokeNative(Native Method)
11-18 19:12:14.048: ERROR/AndroidRuntime(15655): at java.lang.reflect.Method.invoke(Method.java:521)
11-18 19:12:14.048: ERROR/AndroidRuntime(15655): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
11-18 19:12:14.048: ERROR/AndroidRuntime(15655): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
11-18 19:12:14.048: ERROR/AndroidRuntime(15655): at dalvik.system.NativeStart.main(Native Method)
11-18 19:12:14.048: ERROR/AndroidRuntime(15655): Caused by: java.lang.NullPointerException
11-18 19:12:14.048: ERROR/AndroidRuntime(15655): at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203)
11-18 19:12:14.048: ERROR/AndroidRuntime(15655): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:98)
11-18 19:12:14.048: ERROR/AndroidRuntime(15655): at sdo.GeoTracker.DataAccess.SqlAdapter.<init>(SqlAdapter.java:51)
11-18 19:12:14.048: ERROR/AndroidRuntime(15655): at sdo.GeoTracker.DataAccess.SqlAdapter.getInstance(SqlAdapter.java:61)
11-18 19:12:14.048: ERROR/AndroidRuntime(15655): at sdo.GeoTracker.Services.DataService.startService(DataService.java:65)
11-18 19:12:14.048: ERROR/AndroidRuntime(15655): at sdo.GeoTracker.Services.DataService.onCreate(DataService.java:40)
11-18 19:12:14.048: ERROR/AndroidRuntime(15655): at android.app.ActivityThread.handleCreateService(ActivityThread.java:3125)
11-18 19:12:14.048: ERROR/AndroidRuntime(15655): ... 10 more
Toute aide est grandement appréciée ! - Je suis un débutant au développement android, alors s'il vous plaît l'épeler.
pourquoi avez-vous un faux contexte? – apps
bonjour, j'avais besoin de nourrir le sqlliteopenhelper un contexte. comme ceci: OpenHelper classe private static étend SQLiteOpenHelper \t { \t \t OpenHelper publique (contexte de contexte) \t \t {\t \t \t \t \t \t \t \t super (contexte, DATABASE_NAME, null, Database_Version); \t \t} ..snip .. – SimonDK
http://stackoverflow.com/questions/4177731/android-comment-call-method-from-another-class-without-passing-context/4177776#4177776 – apps