Java 从URL检索位图图像,在android中随机获取nullpointerexception
正在处理一个包含谷歌地图的项目。我正在尝试从URL检索位图图像,效果很好,但并非总是如此 我用来检索url的代码在一个异步类中 异步类: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)
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)