2015-08-19 3 views
-1

неустранимые: Основная Попытки вызвать метод интерфейса„INT java.util.List.size()“на нулевой ссылке на объектПопытки вызвать метод интерфейса «INT java.util.List.size()

Я пытаюсь найти поблизости место .... такой ошибки я получаю .... помочь мне Какие изменения я применить плз наставит меня

public class MapsActivity extends FragmentActivity implements LocationListener{ 

    GoogleMap mGoogleMap; 
    Spinner mSprPlaceType; 

    String[] mPlaceType=null; 
    String[] mPlaceTypeName=null; 

    double mLatitude=0; 
    double mLongitude=0; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_maps); 

     // Array of place types 
     mPlaceType = getResources().getStringArray(R.array.place_type); 

     // Array of place type names 
     mPlaceTypeName = getResources().getStringArray(R.array.place_type_name); 

     // Creating an array adapter with an array of Place types 
     // to populate the spinner 
     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, mPlaceTypeName); 

     // Getting reference to the Spinner 
     mSprPlaceType = (Spinner) findViewById(R.id.spr_place_type); 

     // Setting adapter on Spinner to set place types 
     mSprPlaceType.setAdapter(adapter); 

     Button btnFind; 

     // Getting reference to Find Button 
     btnFind = (Button) findViewById(R.id.btn_find); 

     // Getting Google Play availability status 
     int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getBaseContext()); 

     if(status!=ConnectionResult.SUCCESS){ // Google Play Services are not available 

      int requestCode = 10; 
      Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, this, requestCode); 
      dialog.show(); 

     } 
     else 
     { // Google Play Services are available 

      // Getting reference to the SupportMapFragment 
      SupportMapFragment fragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); 

      // Getting Google Map 
      mGoogleMap = fragment.getMap(); 

      // Enabling MyLocation in Google Map 
      mGoogleMap.setMyLocationEnabled(true); 

      // Getting LocationManager object from System Service LOCATION_SERVICE 
      LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 

      // Creating a criteria object to retrieve provider 
      Criteria criteria = new Criteria(); 

      // Getting the name of the best provider 
      String provider = locationManager.getBestProvider(criteria, true); 

      // Getting Current Location From GPS 
      Location location = locationManager.getLastKnownLocation(provider); 

      if(location!=null){ 
       onLocationChanged(location); 
      } 

      locationManager.requestLocationUpdates(provider, 20000, 0, this); 

      // Setting click event lister for the find button 
      btnFind.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 

        int selectedPosition = mSprPlaceType.getSelectedItemPosition(); 
        String place = mPlaceTypeName[selectedPosition]; 

        Toast.makeText(getApplicationContext(),"working",Toast.LENGTH_LONG).show(); 

        StringBuilder sb = new StringBuilder("https://maps.googleapis.com/maps/api/place/nearbysearch/json?"); 
        sb.append("types=place"); 
        sb.append("&location="+mLatitude+", "+mLongitude); 
        sb.append("&radius=10000"); 
        sb.append("&sensor=true"); 
        sb.append("&key=[My API Key]"); 

        // Creating a new non-ui thread task to download json data 
        PlacesTask placesTask = new PlacesTask(); 

        // Invokes the "doInBackground()" method of the class PlaceTask 
        placesTask.execute(sb.toString()); 

        Toast.makeText(getApplicationContext(),"working",Toast.LENGTH_LONG).show(); 

       } 
      }); 

     } 

    } 

    /** A method to download json data from url */ 
    private String downloadUrl(String strUrl) throws IOException{ 
     String data = ""; 
     InputStream iStream = null; 
     HttpURLConnection urlConnection = null; 
     try{ 
      URL url = new URL(strUrl); 

      // Creating an http connection to communicate with url 
      urlConnection = (HttpURLConnection) url.openConnection(); 

      // Connecting to url 
      urlConnection.connect(); 

      // Reading data from url 
      iStream = urlConnection.getInputStream(); 

      BufferedReader br = new BufferedReader(new InputStreamReader(iStream)); 

      StringBuffer sb = new StringBuffer(); 

      String line = ""; 
      while((line = br.readLine()) != null){ 
       sb.append(line); 
      } 

      data = sb.toString(); 

      br.close(); 

     }catch(Exception e){ 
      Log.d("Exception while downloading url", e.toString()); 
     }finally{ 
      iStream.close(); 
      urlConnection.disconnect(); 
     } 

     return data; 
    } 

    /** A class, to download Google Places */ 
    private class PlacesTask extends AsyncTask<String, Integer, String>{ 

     String data = null; 

     // Invoked by execute() method of this object 
     @Override 
     protected String doInBackground(String... url) { 
      try{ 
       data = downloadUrl(url[0]); 
      }catch(Exception e){ 
       Log.d("Background Task",e.toString()); 
      } 
      return data; 
     } 

     // Executed after the complete execution of doInBackground() method 
     @Override 
     protected void onPostExecute(String result){ 
      ParserTask parserTask = new ParserTask(); 

      // Start parsing the Google places in JSON format 
      // Invokes the "doInBackground()" method of the class ParseTask 
      parserTask.execute(result); 
     } 

    } 

    /** A class to parse the Google Places in JSON format */ 
    private class ParserTask extends AsyncTask<String, Integer, List<HashMap<String,String>>>{ 

     JSONObject jObject; 

     // Invoked by execute() method of this object 
     @Override 
     protected List<HashMap<String,String>> doInBackground(String... jsonData) { 

      List<HashMap<String, String>> places = null; 
      PlaceJSONParser placeJsonParser = new PlaceJSONParser(); 

      try{ 
       jObject = new JSONObject(jsonData[0]); 

       /** Getting the parsed data as a List construct */ 
       places = placeJsonParser.parse(jObject); 

      }catch(Exception e){ 
       Log.d("Exception",e.toString()); 
      } 
      return places; 
     } 

     // Executed after the complete execution of doInBackground() method 
     @Override 
     protected void onPostExecute(List<HashMap<String,String>> list){ 

      // Clears all the existing markers 
      mGoogleMap.clear(); 

      for(int i=0;i<list.size();i++){ 

       // Creating a marker 
       MarkerOptions markerOptions = new MarkerOptions(); 

       // Getting a place from the places list 
       HashMap<String, String> hmPlace = list.get(i); 

       // Getting latitude of the place 
       double lat = Double.parseDouble(hmPlace.get("lat")); 

       // Getting longitude of the place 
       double lng = Double.parseDouble(hmPlace.get("lng")); 

       // Getting name 
       String name = hmPlace.get("place_name"); 

       // Getting vicinity 
       String vicinity = hmPlace.get("vicinity"); 

       LatLng latLng = new LatLng(lat, lng); 

       // Setting the position for the marker 
       markerOptions.position(latLng); 

       // Setting the title for the marker. 
       //This will be displayed on taping the marker 
       markerOptions.title(name + " : " + vicinity); 

       // Placing a marker on the touched position 
       mGoogleMap.addMarker(markerOptions); 
      } 
     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 

    @Override 
    public void onLocationChanged(Location location) { 
     mLatitude = location.getLatitude(); 
     mLongitude = location.getLongitude(); 
     LatLng latLng = new LatLng(mLatitude, mLongitude); 

     mGoogleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng)); 
     mGoogleMap.animateCamera(CameraUpdateFactory.zoomTo(12)); 
    } 

    @Override 
    public void onProviderDisabled(String provider) { 
     // TODO Auto-generated method stub 
    } 

    @Override 
    public void onProviderEnabled(String provider) { 
     // TODO Auto-generated method stub 
    } 

    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 
     // TODO Auto-generated method stub 
    } 
} 

Log:

08-19 14: 52: 02,145 22460-22460/com.example.admin.newmapplace Е/AndroidRuntime: неустранимый: Основной процесс: com.example.admin.newmapplace, ПИД: 22460 java.lang.NullPointerException : Попытаться вызвать метод интерфейса 'int java.util.List.size()' на ссылке нулевого объекта на com.example.admin.newmapplace.MapsActivity $ ParserTask.onPostExecute (MapsActivity.java:245) at com.example .admin.newmapplace.MapsActivity $ ParserTask.onPostExecute (MapsActivity.java:215) на android.os.AsyncTask.finish (AsyncTask.java:636) на android.os.AsyncTask.access $ 500 (AsyncTask.java:177) на android.os.AsyncTask $ InternalHandler.handleMessage (AsyncTask.java:653) на android.os.Handler.dispatchMessage (Handler.java:102) на android.os.Looper.loop (Looper.java:135) на android.app.ActivityThread.main (ActivityThread.java:5254) at java.lang.reflect.Method.invoke (собственный метод) в java.lang.reflect.Method.invoke (Method.java:372) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java : 903) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:698)

+0

Должен (ну, наверняка) быть файл и строка, из-за которой возникла проблема. Я полагаю, что это что-то в адаптере, которое не заполнено данными. Пожалуйста, опубликуйте полный журнал. В любом случае, это не имеет ничего общего с Google-картами, но общее программирование –

+0

см. Прикрепляю полный журнал .... @ NDorigatti –

ответ

2

ошибка довольно пояснительная:

java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference 
        at com.example.admin.newmapplace.MapsActivity$ParserTask.onPostExecute(MapsActivity.java:245) 
        at com.example.admin.newmapplace.MapsActivity$ParserTask.onPostExecute(MapsActivity.java:215) 

Если вы отметите в ParserTask onPostExecute, этой линии (215 или 245) должен быть:

for(int i=0;i<list.size();i++){ 

И вопрос заключается в том, что метод получает нулевой «список» пункт, который берется из параметра метода:

protected void onPostExecute(List<HashMap<String,String>> list){ 

это нуль, потому что ваш метод «doInBackground» возвращает нулевой объект, не смотря на свой код:

@Override 
    protected List<HashMap<String,String>> doInBackground(String... jsonData) { 

     List<HashMap<String, String>> places = null; 
     PlaceJSONParser placeJsonParser = new PlaceJSONParser(); 

     try{ 
      jObject = new JSONObject(jsonData[0]); 

      /** Getting the parsed data as a List construct */ 
      places = placeJsonParser.parse(jObject); 

     }catch(Exception e){ 
      Log.d("Exception",e.toString()); 
     } 
     return places; 
    } 

кажется, что возбуждается исключение, а затем «места» нет t set, что приведет к возврату нулевого объекта. Если вы проверите журнал (вы установите Debug, в этом случае лучше сделать Log.e), вы должны указать строку с «Исключение» и текст исключения. Альтернатива для регистрации исключения:

Log.e(TAGOFMESSAGE,"Raised an exception during doInBackground Method",e); 

Это будет регистрировать ошибку и поставить трассировку стека, за исключением в журнале, помогая вам понять, что подняло исключение.

Смежные вопросы

 Смежные вопросы