Java 从URL检索位图图像,在android中随机获取nullpointerexception

Java 从URL检索位图图像,在android中随机获取nullpointerexception,java,android,eclipse,google-maps,Java,Android,Eclipse,Google Maps,正在处理一个包含谷歌地图的项目。我正在尝试从URL检索位图图像,效果很好,但并非总是如此 我用来检索url的代码在一个异步类中 异步类: public class retrieveimage extends AsyncTask<String,Void,Void> { Store_data s; MarkerOptions marker; Bitmap pinbit; public retrieveimage(Store_data s)

正在处理一个包含谷歌地图的项目。我正在尝试从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);
        }


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

日志:

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)

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

在这里查看我的ans:首先,您可以使用
if(pinbit!=null)防止NPE{…
。这将不会调用NPE。但似乎主机不可用或后台进程中断或类似情况,因此您需要重试此操作。loopj提供的
AsyncHttpClient
库非常适合此操作,它会执行所有必要的操作,并在失败时重试。@Haresh,是不是rantee随机NPE将停止??
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)