2017-01-19 1 views
0

Entrer dans la bibliothèque de chargement de l'image Glide pour Android. travaille actuellement avec un code d'ici: https://github.com/bumptech/glide/issues/459Android, Glide Chargement de la bibliothèque: NullPointerException, ProviderInfo

Mon projet complet est ici est que vous voulez regarder:

https://github.com/mhurwicz/glide02

Je reçois l'exception suivante quand je lance l'application dans le émulateur dans Android studio:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.XmlResourceParser android.content.pm.ProviderInfo.loadXmlMetaData(android.content.pm.PackageManager, java.lang.String)' on a null object reference 

Ceci est la déclaration clé dans MainActivity:

new ShareTask(this).execute("http://thelink"); 

(thelink est en réalité goo.gl/gEgYUd - ne pouvait pas laisser cela dans ci-dessus parce que stackoverflow ne permet pas les raccourcis URL.)

Voici mon code pour la classe ShareTask

class ShareTask extends AsyncTask<String, Void, File> { 
    private final Context context; 

    public ShareTask(Context context) { 
     this.context = context; 
    } 
    @Override protected File doInBackground(String... params) { 
     String url = params[0]; // should be easy to extend to share multiple images at once 
     try { 
      return Glide 
        .with(context) 
        .load(url) 
        .downloadOnly(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL) 
        .get() // needs to be called on background thread 
        ; 
     } catch (Exception ex) { 
      Log.w("SHARE", "Sharing " + url + " failed", ex); 
      return null; 
     } 
    } 
    @Override protected void onPostExecute(File result) { 
     if (result == null) { return; } 
     Uri uri = FileProvider.getUriForFile(context, context.getPackageName(), result); 
     share(uri); // startActivity probably needs UI thread 
    } 

    private void share(Uri result) { 
     Intent intent = new Intent(Intent.ACTION_SEND); 
     intent.setType("image/jpeg"); 
     intent.putExtra(Intent.EXTRA_SUBJECT, "Shared image"); 
     intent.putExtra(Intent.EXTRA_TEXT, "Look what I found!"); 
     intent.putExtra(Intent.EXTRA_STREAM, result); 
     context.startActivity(Intent.createChooser(intent, "Share image")); 
    } 
} 

En utilisant le débogage, il semble que je en cours d'exécution des ennuis à la déclaration get(). D'une part, la largeur et la hauteur sont de très grands nombres négatifs. (Voir le code surligné en vert ci-dessous.) L'instruction get() renvoie alors null. (Voir le code surligné en rouge ci-dessous.)

Merci d'avance pour toute aide que vous pouvez fournir!

enter image description here

+1

veuillez fournir plus de journaux –

Répondre

2

NPE vient de FileProvider.getUriForFile parce que vous passez dans la mauvaise autorité. Vous avez déclaré android:authorities="com.example.fileprovider" dans le manifeste, mais vous utilisez le nom du package lors de l'appel. Cela ne parvient pas à résoudre le info dans FileProvider.parsePathStrategy. Associez ces deux cordes et vous serez prêt à partir.

La solution la plus simple est d'utiliser android:authorities="${applicationId}", ce qui conduit à 0 chaînes codées en dur, donc vous pouvez continuer à utiliser context.getPackageName().

En ce qui concerne vos préoccupations au cours de débogage:

  • Target.SIZE_ORIGINAL est déclaré être MIN_VALUE, d'où le grand nombre
  • il ne revient pas null, IDEA est juste confus au sujet où il est dans la méthode, que return null; shouldn ne sera pas exécuté s'il échoue dans le code FileProvider.
  • doGet(null): null est le délai d'attente ici, il est gardé correctement dans le code

J'ai couru l'application et bizarrement j'ai eu une ligne de journal disant

W/SHARE: Partage http:// ...échoué

mais pas une trace de la pile, ce qui est bizarre, parce que ex ne peut pas être null dans un catch!

+0

Merci, @TWiStErRob - Cela a permis de résoudre ce problème. Cependant, je reçois maintenant IllegalArgumentException: Impossible de trouver la racine configurée qui contient/data/data /. Détails ici: http://stackoverflow.com/questions/41754799/android-illegalargumentexception-failed-to-find-configured-root-that-contains – user1147171