【问题标题】:Retrieving bitmap image from a URL ,getting nullpointerexception randomly in android从URL中检索位图图像,在android中随机获取nullpointerexception
【发布时间】:2014-07-18 13:06:47
【问题描述】:

正在处理一个包含谷歌地图的项目。我正在尝试从 URL 检索位图图像,它工作正常,但不是一直

我用来检索 url 的代码在异步类中。

异步类:

public class retrieveimage extends AsyncTask<String,Void,Void>
    {
    Store_data s;
    MarkerOptions marker;
    Bitmap pinbit;
        public retrieveimage(Store_data s) {
            this.s=s;
        }
        @Override
        protected Void doInBackground(String... arg0) {
            try {
                 marker = new MarkerOptions().position(new LatLng(Double.parseDouble(s.store_latitude),Double.parseDouble(s.store_longitude))).title(s.store_name);
                String url1=arg0[0];
                URL url = new URL(url1);
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                connection.setDoInput(true);
                connection.connect();
                InputStream input = connection.getInputStream();
                bitmap= BitmapFactory.decodeStream(input);
                pinbit=bitmap;

            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
            return null;

        }
        @Override
        protected void onPostExecute(Void result) {
            View custom_layout = ((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.custom_marker_layout,null);
            ImageView iv_category_logo=(ImageView) custom_layout.findViewById(R.id.iv_category_logo);
            pinbit=Bitmap.createScaledBitmap(pinbit,68,62,false);
            iv_category_logo.setImageBitmap(pinbit);
            //pinbit=MainActivity.getCroppedBitmap(pinbit, 10);
            marker.icon(BitmapDescriptorFactory.fromBitmap(createDrawableFromView(StoreFinal.this, custom_layout)));
          // adding marker

          googleMap.addMarker(marker);
        }


    }

我将异步类称为:

 new retrieveimage(sobj).execute(URL_image+sobj.category+".png");

问题是变量pinbit 随机获取NPE。很多时候都看到了期望的结果。但有时我得到NPE 是随机的。所以我认为doInBackground 方法有问题,其中Web 操作发生。如何确保带有 web 操作的代码不会中断?

LOGCAT:

07-18 18:26:20.289: E/AndroidRuntime(27803): FATAL EXCEPTION: main
07-18 18:26:20.289: E/AndroidRuntime(27803): java.lang.NullPointerException
07-18 18:26:20.289: E/AndroidRuntime(27803):    at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:344)
07-18 18:26:20.289: E/AndroidRuntime(27803):    at com.igloo.storelocater.StoreFinal$retrieveimage.onPostExecute(StoreFinal.java:177)
07-18 18:26:20.289: E/AndroidRuntime(27803):    at com.igloo.storelocater.StoreFinal$retrieveimage.onPostExecute(StoreFinal.java:1)
07-18 18:26:20.289: E/AndroidRuntime(27803):    at android.os.AsyncTask.finish(AsyncTask.java:417)
07-18 18:26:20.289: E/AndroidRuntime(27803):    at android.os.AsyncTask.access$300(AsyncTask.java:127)
07-18 18:26:20.289: E/AndroidRuntime(27803):    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)
07-18 18:26:20.289: E/AndroidRuntime(27803):    at android.os.Handler.dispatchMessage(Handler.java:99)
07-18 18:26:20.289: E/AndroidRuntime(27803):    at android.os.Looper.loop(Looper.java:130)
07-18 18:26:20.289: E/AndroidRuntime(27803):    at android.app.ActivityThread.main(ActivityThread.java:3689)
07-18 18:26:20.289: E/AndroidRuntime(27803):    at java.lang.reflect.Method.invokeNative(Native Method)
07-18 18:26:20.289: E/AndroidRuntime(27803):    at java.lang.reflect.Method.invoke(Method.java:507)
07-18 18:26:20.289: E/AndroidRuntime(27803):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
07-18 18:26:20.289: E/AndroidRuntime(27803):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
07-18 18:26:20.289: E/AndroidRuntime(27803):    at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

  • 在这里查看我的答案:stackoverflow.com/questions/19310985/…
  • 首先,您可以使用if(pinbit != null) { ... 阻止NPE。这不会调用 NPE。但似乎主机不可用或后台进程中断或类似的情况,因此您需要重试此操作。 loopj 的 AsyncHttpClient 库非常适合这一点,它会执行所有必要的操作并在失败时重试。
  • @Haresh ,它是否保证随机 NPE 会停止??

标签: java android eclipse google-maps


【解决方案1】:

只需尝试集成 AQuery 库并使用它的回调方法,该方法将为您提供位图及其所属的 URL。希望对您有所帮助!

【讨论】:

    猜你喜欢
    • 2017-02-19
    • 1970-01-01
    • 2019-04-27
    • 1970-01-01
    • 2021-05-23
    • 2019-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多