我的AsyncTask中的NullPointerException

大家好,我有一个异步任务,根据用户输入的地址指向地图上的一个点。 我在onPostExecute中有一个NullPointerException,我可以找出原因。 这是异步类

private class GeocoderTask extends AsyncTask<String, Void, List
>{ @Override protected List
doInBackground(String... locationName) { // Creating an instance of Geocoder class Geocoder geocoder = new Geocoder(getBaseContext()); List
addresses = null; try { // Getting only one address that matches the query addresses = geocoder.getFromLocationName(locationName[0], 3); } catch (IOException e) { e.printStackTrace(); } return addresses; } @Override protected void onPostExecute(List
addresses) { if(addresses==null || addresses.size()==0){ Toast.makeText(getBaseContext(), "No Location found.Please check address", Toast.LENGTH_SHORT).show(); } // Clears all the existing markers on the map mMap.clear(); // Adding Markers on Google Map for each matching address for(int i=0;i 0 ? address.getAddressLine(0) : "", address.getLocality()); MarkerOptions markerOptions = new MarkerOptions(); markerOptions.position(latLng_search); markerOptions.title(addressText); mMap.addMarker(markerOptions); // Locate the first location if(i==0) mMap.animateCamera(CameraUpdateFactory.newLatLng(latLng_search)); } } }

这是logcat:

  09-28 02:51:45.501: E/AndroidRuntime(16587): FATAL EXCEPTION: main 09-28 02:51:45.501: E/AndroidRuntime(16587): java.lang.NullPointerException 09-28 02:51:45.501: E/AndroidRuntime(16587): at drkstr.yar.Create_reminder_loc$GeocoderTask.onPostExecute(Create_reminder_loc.java:585) 09-28 02:51:45.501: E/AndroidRuntime(16587): at drkstr.yar.Create_reminder_loc$GeocoderTask.onPostExecute(Create_reminder_loc.java:1) 09-28 02:51:45.501: E/AndroidRuntime(16587): at android.os.AsyncTask.finish(AsyncTask.java:417) 09-28 02:51:45.501: E/AndroidRuntime(16587): at android.os.AsyncTask.access$300(AsyncTask.java:127) 09-28 02:51:45.501: E/AndroidRuntime(16587): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429) 09-28 02:51:45.501: E/AndroidRuntime(16587): at android.os.Handler.dispatchMessage(Handler.java:99) 09-28 02:51:45.501: E/AndroidRuntime(16587): at android.os.Looper.loop(Looper.java:143) 09-28 02:51:45.501: E/AndroidRuntime(16587): at android.app.ActivityThread.main(ActivityThread.java:4196) 09-28 02:51:45.501: E/AndroidRuntime(16587): at java.lang.reflect.Method.invokeNative(Native Method) 09-28 02:51:45.501: E/AndroidRuntime(16587): at java.lang.reflect.Method.invoke(Method.java:507) 09-28 02:51:45.501: E/AndroidRuntime(16587): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 09-28 02:51:45.501: E/AndroidRuntime(16587): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 09-28 02:51:45.501: E/AndroidRuntime(16587): at dalvik.system.NativeStart.main(Native Method) 

错误在第585行出现,我在代码中标记了这一点。 该行中只有2个变量是i和地址,我检查地址是否为null。 我不明白为什么我仍然得到一个空指针exception。

如果您需要查看代码,请告诉我。

感谢您花时间阅读本文以及您可以提供的任何帮助。

 if(addresses==null || addresses.size()==0){ Toast.makeText(getBaseContext(), "No Location found.Please check address", Toast.LENGTH_SHORT).show(); return; // add this } 

正如评论中所建议的那样,您的addresses变量很可能为空。

您检查条件语句中的addresses是否为null ,但您实际上从未处理过这种情况。 如果addressesnull您所做的只是通过Toast通知用户,但是稍后(在Toast的动画甚至加载到屏幕上之前)的FRACTION会导致程序崩溃。

您需要处理addressesnull的情况(即,不调用变量上的方法并尝试填充变量,或完全不同的东西),或确保它永远不为null

把你的for循环放在else部分,因为即使你的地址为null或address.size = 0,for循环也会以null值执行并给出NPE