2016-07-17 68 views
1

我试图从firebase中检索图片,然后将其上传到标记图标中。 基于来自firebase教程的示例,我成功地检索了图像uri,并且我可以在将uri放入图像视图时放入它,它工作得很好,然后我尝试将它放入标记的图标,但出现错误:将图片从firebase存储转换为google地图标记

D/AndroidRuntime: Shutting down VM 
E/UncaughtException: java.lang.NullPointerException 
         at maps.f.g.a(Unknown Source) 
         at maps.af.g$a.<init>(Unknown Source) 
         at maps.af.g.a(Unknown Source) 
         at maps.af.R.<init>(Unknown Source) 
         at maps.af.t.a(Unknown Source) 
         at vl.onTransact(:com.google.android.gms.DynamiteModulesB:167) 
         at android.os.Binder.transact(Binder.java:380) 
         at com.google.android.gms.maps.internal.IGoogleMapDelegate$zza$zza.addMarker(Unknown Source) 
         at com.google.android.gms.maps.GoogleMap.addMarker(Unknown Source) 
         at com.htaka.mywall.MapsActivity$3.onSuccess(MapsActivity.java:142) 
         at com.htaka.mywall.MapsActivity$3.onSuccess(MapsActivity.java:137) 
         at com.google.android.gms.tasks.zze$1.run(Unknown Source) 
         at android.os.Handler.handleCallback(Handler.java:739) 
         at android.os.Handler.dispatchMessage(Handler.java:95) 
         at android.os.Looper.loop(Looper.java:135) 
         at android.app.ActivityThread.main(ActivityThread.java:5421) 
         at java.lang.reflect.Method.invoke(Native Method) 
         at java.lang.reflect.Method.invoke(Method.java:372) 
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:914) 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:707) 
I/DynamiteModule: Considering local module com.google.android.gms.tagmanager:3 and remote module com.google.android.gms.tagmanager:3 
I/DynamiteModule: Selected local version of com.google.android.gms.tagmanager 
W/GoogleTagManager: Tag Manager's event handler WILL NOT be installed (no container loaded) 
I/GoogleTagManager: Tag Manager initilization took 29ms 
D/FirebaseCrashApiImpl: throwable java.lang.NullPointerException 
E/AndroidRuntime: FATAL EXCEPTION: main 
        Process: com.htaka.mywall, PID: 1013 
        java.lang.NullPointerException 
         at maps.f.g.a(Unknown Source) 
         at maps.af.g$a.<init>(Unknown Source) 
         at maps.af.g.a(Unknown Source) 
         at maps.af.R.<init>(Unknown Source) 
         at maps.af.t.a(Unknown Source) 
         at vl.onTransact(:com.google.android.gms.DynamiteModulesB:167) 
         at android.os.Binder.transact(Binder.java:380) 
         at com.google.android.gms.maps.internal.IGoogleMapDelegate$zza$zza.addMarker(Unknown Source) 
         at com.google.android.gms.maps.GoogleMap.addMarker(Unknown Source) 
         at com.htaka.mywall.MapsActivity$3.onSuccess(MapsActivity.java:142) 
         at com.htaka.mywall.MapsActivity$3.onSuccess(MapsActivity.java:137) 
         at com.google.android.gms.tasks.zze$1.run(Unknown Source) 
         at android.os.Handler.handleCallback(Handler.java:739) 
         at android.os.Handler.dispatchMessage(Handler.java:95) 
         at android.os.Looper.loop(Looper.java:135) 
         at android.app.ActivityThread.main(ActivityThread.java:5421) 
         at java.lang.reflect.Method.invoke(Native Method) 
         at java.lang.reflect.Method.invoke(Method.java:372) 
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:914) 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:707) 
W/DynamiteModule: Local module descriptor class for com.google.firebase.auth not found. 
I/Process: Sending signal. PID: 1013 SIG: 9 
Application terminated. 

我不知道有什么问题就...这是我一起工作的代码,我使用的LoadImage把它设置成一个ImageView的类:

public void setMarkers(DataSnapshot dS ,boolean re) { 
     if(re) {mMap.clear();} 

     post = dS.getValue(Post.class); 

     storageRef.child("mountains.jpg").getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() { 
      @Override 
      public void onSuccess(Uri uri) { 
       ImageView im=new ImageView(MapsActivity.this); 
       GlideUtil.loadImage(uri.toString(),im); 
       marker = mMap.addMarker(new MarkerOptions() 
         .position(new LatLng(post.latitude, post.longitude)) 
         .title(post.title) 
         .icon(BitmapDescriptorFactory.fromBitmap(im.getDrawingCache())) 
       ); 

      } 
     }).addOnFailureListener(new OnFailureListener() { 
      @Override 
      public void onFailure(@NonNull Exception exception) { 
       System.out.print("image "+exception.getMessage()); 
       marker = mMap.addMarker(new MarkerOptions() 
         .position(new LatLng(post.latitude, post.longitude)) 
         .title(post.title) 
       ); 
      } 
     }); 

PS:如果我删除图标(BitmapDescriptorFactry ......)应用程序运行它应该。

这里是的LoadImage,我是从样品中的火力github上一节,我测试了它和它的工作,你basicly与ImageView的发送URI并加载它,进入ImageView的,万一有人位数的: 摇篮:编译“com.github.bumptech.glide:滑翔:3.6.0”

public class GlideUtil { 
    public static void loadImage(String url, ImageView imageView) { 
     Context context = imageView.getContext(); 
     ColorDrawable cd = new ColorDrawable(ContextCompat.getColor(context, R.color.wallet_holo_blue_light)); 
     Glide.with(context) 
       .load(url) 
       .placeholder(cd) 
       .crossFade() 
       .centerCrop() 
       .into(imageView); 
    } 

回答

0

我想这个问题是因为你的ImageView尚未测量尚未在您im.getDrawingCache()方法返回null,你打电话的时刻。因此,你可以尝试使用的Glidepreload()RequestListener并设置加载Bitmap作为Marker图标:

@Override 
public void onSuccess(Uri uri) { 
    ColorDrawable cd = new ColorDrawable(ContextCompat.getColor(MapsActivity.this, R.color.wallet_holo_blue_light)); 
    Glide.with(MapsActivity.this) 
     .load(uri.toString()) 
     .asBitmap() 
     .listener(new RequestListener<String, Bitmap>() { 
      @Override 
      public boolean onException(Exception e, String model, Target<Bitmap> target, boolean isFirstResource) { 
       return false; 
      } 

      @Override 
      public boolean onResourceReady(Bitmap resource, String model, Target<Bitmap> target, boolean isFromMemoryCache, boolean isFirstResource) { 
       marker = mMap.addMarker(new MarkerOptions() 
        .position(new LatLng(post.latitude, post.longitude)) 
        .title(post.title) 
        .icon(BitmapDescriptorFactory.fromBitmap(resource)) 
       ); 
       return true; 
      } 
     }) 
     .placeholder(cd) 
     .centerCrop() 
     .preload();  
} 
+0

感谢一吨!最好的答案我会预先得到,复制它,并像魅力一样工作。 –