Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java AsyncTask中的NullPointerException_Java_Android_Android Asynctask - Fatal编程技术网

Java AsyncTask中的NullPointerException

Java AsyncTask中的NullPointerException,java,android,android-asynctask,Java,Android,Android Asynctask,大家好,, 我有一个异步任务,根据用户输入的地址指向地图上的一个点。我在onPostExecute中有一个NullPointerException,我可以找出原因。下面是异步类 private class GeocoderTask extends AsyncTask<String, Void, List<Address>>{ @Override protected List<Address> doIn

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

     private class GeocoderTask extends AsyncTask<String, Void, List<Address>>{

            @Override
            protected List<Address> doInBackground(String... locationName) {
                // Creating an instance of Geocoder class
                Geocoder geocoder = new Geocoder(getBaseContext());
                List<Address> 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<Address> 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<addresses.size();i++){// this is line 585 from the logcat             

                    Address address = (Address) addresses.get(i);

                    // Creating an instance of GeoPoint, to display in Google Map
                    LatLng latLng_search = new LatLng(address.getLatitude(), address.getLongitude());

                     String addressText = String.format("%s, %s",
                                address.getMaxAddressLineIndex() > 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));   
                }           
            }               
        }  
错误出现在第585行,我已在代码中对此进行了标记。该行中仅有2个变量是i和address,我检查address是否为null。我不明白为什么我仍然得到一个空指针异常

如果您需要查看更多的代码,请告诉我


感谢您花时间阅读此内容并提供帮助。

如评论中所述,您的
地址变量很可能为空

在条件语句中检查
地址
是否为
,但实际上从未处理过这种情况。如果
addresses
null
则您只需通过Toast通知用户,但几秒钟后(甚至在Toast的动画加载到屏幕之前),您的程序就会崩溃


您需要处理
地址
null
(也就是说,不要调用变量上的方法并尝试填充变量,或者完全不同的东西),或者确保它永远不为
null
,正如注释中所建议的,您的
地址
变量很可能为null

if(addresses==null || addresses.size()==0){
      Toast.makeText(getBaseContext(), "No Location found.Please check address", Toast.LENGTH_SHORT).show();
      return; // add this
}
在条件语句中检查
地址
是否为
,但实际上从未处理过这种情况。如果
addresses
null
则您只需通过Toast通知用户,但几秒钟后(甚至在Toast的动画加载到屏幕之前),您的程序就会崩溃


您需要处理
地址
的情况(即,不调用变量上的方法并尝试填充变量,或完全不同的内容),或者确保它永远不会是空的,因为现在即使你的地址是空的或者是地址。size=0,for循环也会用空值执行,并给出NPE,因为现在即使你的地址是空的或者是地址。size=0,for循环也会用空值并给出NPE

您的地址为空。此
addresses=geocoder.getFromLocationName(locationName[0],3)
可能会失败。并使用活动上下文
Geocoder Geocoder=new Geocoder(ActivtiyName.this)
您的地址为空。此
addresses=geocoder.getFromLocationName(locationName[0],3)
可能会失败。并使用活动上下文
Geocoder Geocoder=new Geocoder(activityname.this)
if(addresses==null || addresses.size()==0){
      Toast.makeText(getBaseContext(), "No Location found.Please check address", Toast.LENGTH_SHORT).show();
      return; // add this
}