10
votes

SQLITEOPENHELER.GETWRITEADEDABASE () NULL POINTER EXCEPTION SUR Android

J'ai eu de la chance avec SQLite avec SQLite hétéro et direct SQL dans Android, mais c'est la première fois que j'enveloppe une DB dans un fichier de contenu. Je continue à obtenir une exception de pointeur nulle lorsque vous appelez getwritabledatabase () ou getReadableAbase () . Est-ce juste une erreur stupide que j'ai faite avec des initialisations dans mon code ou y a-t-il un problème plus important? XXX

Comme toujours, merci pour l'assistance!

-

Je ne sais pas si ce détail aide, mais voici LOGCAT montrant l'exception:

Supprimé Images morts Link


1 commentaires

Avez-vous déjà trouvé une résolution à cela?


7 Réponses :


5
votes

plutôt que: xxx

Essayez: xxx

et voyez si cela aide.

Si c'est le cas Non, pourriez-vous poster le nullpointException Trace de pile?


6 commentaires

Merci pour la réponse! Malheureusement, cela n'aide pas. "Ceci" est un approbateur de contenu plutôt qu'un contexte. J'ai essayé de poster une capture d'écran de l'erreur. C'est large, alors vous voudrez l'ouvrir dans un nouvel onglet. Je ne sais pas si ce détail aide vraiment, bien que ...


Oups, vous êtes correct - je garde la pensée ContentProvider hériter du contexte, et ce n'est pas le cas. En ce qui concerne la trace de la pile, il ne se charge pas pour moi. Vous pouvez utiliser DDMS (ou la perspective DDMS dans Eclipse) pour enregistrer une partie d'une trace de pile sous forme de fichier texte. Mettez simplement en surbrillance les lignes d'intérêt et cliquez sur l'icône Enregistrer dans la barre d'outils de l'onglet LogCat.


Merci pour l'offre de plus d'aide! Juste l'autre jour, je me suis assis avec Android Pro et il a été capable de résoudre mon problème: faites le getWRITrabledAbase () dans le cadre de l'Oncreate () plutôt que dans l'insert ()


HMM, en fait maintenant, je suis arrivé à essayer d'utiliser la DB dans la méthode insert (), je reçois la même exception du pointeur Null. Il est temps de poser des personnes sur Google à ce sujet, étant donné que j'ai reçu un e-mail des autres qui se demandent de ma "solution".


Utilisez-vous contentvalues ​​ dans votre insert () méthode?


Oui. Est-ce un problème potentiel?



0
votes

Assurez-vous que lorsque vous créez l'AVD, spécifiez une certaine quantité d'espace de carte SD. J'ai eu le même problème et cela résouda. Si cela ne vous aide pas, vous pouvez également essayer de démarrer l'émulateur avec l'option -Hipe-Data.


2 commentaires

Merci pour la suggestion, mais je teste toujours sur un appareil réel, je ne pense donc pas que ce soit le problème.


Qu'en est-il de l'option -wipe-Data? Peut-être que cela pourrait aider à le faire fonctionner.



2
votes

Cette erreur résulte presque certainement d'un contexte invalide passé dans: xxx


0 commentaires

2
votes

J'avais juste ce problème avec la SQLite NullPointerException dans une non-activité et le problème était qu'il avait un contexte non valide.

Mon correctif transmettait le contexte à Oncreate au lieu du constructeur. Essayez de trouver un contexte d'un autre endroit pour faire gettaplicationContext () .


0 commentaires

1
votes

Essayez Utiliser getwritabledatabase () dans un certain temps après avoir initié l'assistant vous avez nullpointException car la base de données n'était pas préparée complètement et ne faites pas cela dans le fil de l'interface utilisateur, sinon cela peut causer ANR


0 commentaires

0
votes

J'ai eu cette même erreur NullPointerException lorsque GetReadAfAdAbase () est appelé interne Query () parce que j'étais mal à la question de mon fournisseur de contenu. Je ne vois rien de mal à la façon dont vous construisez votre base de données. getContext () devrait vous donner l'objet contexteur approprié. Cependant, je ferais attention à la manière dont vous faites vos questions sur le fournisseur de contenu. Vous devez vous assurer que vous avez une référence valide à votre résolveur de contenu (c.-à-d. En appelant getContentresolver (). Query (..)) et utilise cela pour effectuer la requête.


0 commentaires

1
votes

Je viens d'avoir ce problème et je me suis rendu compte que c'était un peu un hareng rouge.

Mon problème découle de la façon dont j'utilisais le fournisseur de contenu.

J'étais accessible en réalité à l'approche de contenu directement plutôt que dans le contenu du contenu. C'est essentiellement un moyen facile de trébucher si votre nouveau pour utiliser des fournisseurs de contenu.

espère que cela aide :)


0 commentaires