Kan niet toevoegen aan mijn lijst, gooit een NullPointerException

Wat ik probeer te doen, vind ik, is vrij eenvoudig, maar dan kom ik uit een PHP-achtergrond (je weet wel, waar het grootste deel van het zware werk met en voor jou is gedaan).

in principe is dit mijn log:

12-06 15:45:18.282: D/MAPVIEW(32047): Matching Providers are: [network, gps]
12-06 15:45:18.282: D/MAPVIEW(32047): Um, whats the best provder? Well its obviously 'network'
12-06 15:45:18.753: D/MAPVIEW(32047): Location Data: Lat:49, Long: -116
12-06 15:45:18.753: D/MAPVIEW(32047): Could not add coordinate array to List, Error: java.lang.NullPointerException
12-06 15:45:18.753: D/MAPVIEW(32047): Location Data: Lat:50, Long: -116
12-06 15:45:18.753: D/MAPVIEW(32047): Could not add coordinate array to List, Error: java.lang.NullPointerException
12-06 15:45:18.753: D/MAPVIEW(32047): Location Data: Lat:49, Long: -117
12-06 15:45:18.753: D/MAPVIEW(32047): Could not add coordinate array to List, Error: java.lang.NullPointerException
12-06 15:45:18.753: D/MAPVIEW(32047): Location Data: Lat:49, Long: -115
12-06 15:45:18.753: D/MAPVIEW(32047): Could not add coordinate array to List, Error: java.lang.NullPointerException
12-06 15:45:18.753: D/MAPVIEW(32047): Location Data: Lat:49, Long: -117
12-06 15:45:18.753: D/MAPVIEW(32047): Could not add coordinate array to List, Error: java.lang.NullPointerException
12-06 15:45:18.753: D/MAPVIEW(32047): Location Data: Lat:49, Long: -117
12-06 15:45:18.763: D/MAPVIEW(32047): Could not add coordinate array to List, Error: java.lang.NullPointerException
12-06 15:45:18.763: D/MAPVIEW(32047): Location Data: Lat:50, Long: -115
12-06 15:45:18.763: D/MAPVIEW(32047): Could not add coordinate array to List, Error: java.lang.NullPointerException
12-06 15:45:18.763: D/MAPVIEW(32047): Location Data: Lat:49, Long: -116
12-06 15:45:18.763: D/MAPVIEW(32047): Could not add coordinate array to List, Error: java.lang.NullPointerException
12-06 15:45:18.763: D/MAPVIEW(32047): Location Data: Lat:50, Long: -118
12-06 15:45:18.763: D/MAPVIEW(32047): Could not add coordinate array to List, Error: java.lang.NullPointerException
12-06 15:45:18.763: D/MAPVIEW(32047): Location Data: Lat:49, Long: -114
12-06 15:45:18.783: D/MAPVIEW(32047): Could not add coordinate array to List, Error: java.lang.NullPointerException
12-06 15:45:18.783: D/AndroidRuntime(32047): Shutting down VM
12-06 15:45:18.783: W/dalvikvm(32047): threadid=1: thread exiting with uncaught exception (group=0x4001d5a0)

Je zult zien dat ik probeer toe te voegen aan een lijst met coördinaten, en de try catch is de uitzondering aan het vangen. (Maak je geen zorgen over de crash nu, ik kom daar wel aan).

Dus zonder veel verder adeu, hier is mijn relevante code:

package com.private.clientndablocked;

// ... imports

public class ShowMapView extends MapActivity {

   //... some initializers
    List allLocations;


    @Override
    protected boolean isRouteDisplayed() {
        return false;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

       //.. whole bunch of other unreleated stuff



       //A single json object, this gets populated with cherry picked json array items
        JSONObject obj = null;

       //go through each of the items in the json array
        for(int i = 0; i < json.length(); i++) {

            try {
               //We must try to get the object first
                obj = (JSONObject) json.get(i);
            } catch (JSONException e) {

                e.printStackTrace();
            }

           //Initialize temp data with defaults
            int Latitude = 0;
            int Longitude = 0;
            String Title = "";
            String ID = "";
            int[] coords = new int[2];

           //So we actually have a picked item?
            if(obj != null)
                try {

                   //Lets try to assign the temp vars with their real data
                    Latitude = (int) (obj.getDouble("lat") * 1e6);
                    Longitude = (int) (obj.getDouble("long") * 1e6);
                    Title = (String) (obj.getString("title"));
                    ID = (String) (obj.getString("id"));


                   //Save the lat and long of the new location data (non micro) 
                   //This stuff goes into allLocations List
                    coords[0] = obj.getInt("lat");
                    coords[1] = obj.getInt("long");

                } catch (JSONException e) {
                    e.printStackTrace();
                }

           //Create a new GeoPoint to store the microdegrees into
            GeoPoint point = new GeoPoint(
                Latitude, 
                Longitude
            );

           //Create a new OverlayItem with the GeoPoint and a title and snippet
            OverlayItem overlayitem = new OverlayItem(
                point, 
                Title, 
                ID
            );

            itemizedoverlay.addOverlay(overlayitem);
            mapOverlays.add(itemizedoverlay);

            Log.d("MAPVIEW", "Location Data: Lat:" + coords[0] + ", Long: " + coords[1] );

            try{
                allLocations.add(coords);//************* this is whats failing ******************
            } catch(Exception e) {
                Log.d("MAPVIEW", "Could not add coordinate array to List, Error: " + e.toString());
            }



        }

       //... whole bunch more unrelated stuff


}

Het enige dat een beetje anders wordt, is wanneer ik het toevoeg

allLocations = Arrays.asList();

boven de grote voor lus json extractor. Dit laat het programma vervolgens UnsupportedOperationException gebruiken.

Eerlijk gezegd weet ik niet wat ik anders moet doen. ..

Ik dacht dat ik de lijsten had uitgewerkt, maar blijkbaar niet :(

(ps: ik wil deze op deze manier opslaan, zodat ik dit kan doen:

int minLat = Integer.MAX_VALUE;
int maxLat = Integer.MIN_VALUE;
int minLon = Integer.MAX_VALUE;
int maxLon = Integer.MIN_VALUE;

for (int[] l : allLocations) { 

    int lat = (int) l[0];
    int lon = (int) l[1];


    maxLat = Math.max(lat, maxLat);
    minLat = Math.min(lat, minLat);
    maxLon = Math.max(lon, maxLon);
    minLon = Math.min(lon, minLon);

 }
0

1 antwoord

Ik zie niet waar je je lijst hebt geïnitialiseerd. U moet uw lijst initialiseren om deze eerst te gebruiken

allLocations = new ArrayList();

Ook weet ik niet zeker hoe u gebruikt

Arrays.asList

zonder een compilatie-uitzondering te krijgen. De methode kost een arrayargumentatie. Bekijk de javadoc :

4
toegevoegd
AH!! Daar gaan we! Zie ik probeerde om dat te doen, maar omdat ik vrij nieuw ben, moet ik ergens syntaxis hebben verknoeid omdat Eclipse .. deze hele override-methode heeft gemaakt toen ik het laatste invoerde), en het is nog steeds fout, dus ik dacht dat ik het had gedaan het verkeerde pad :( Bedankt voor de ultra snelle reactie!
toegevoegd de auteur RedactedProfile, de bron
Godzijdank hiervoor. Ik heb net een uur besteed aan het casten en andere niet-essentiële dingen doen. PHP maakt dingen zo gemakkelijk, maar ik moet toegeven dat Java lief is.
toegevoegd de auteur frostymarvelous, de bron