0

我正在开发一个 Android 应用程序。我在网上看了,尝试了一些东西,但没有任何工作。我正在尝试在我的 Android 应用程序中运行一个静态内部类。它为我排序了一个 ArrayList。我尝试了以下方法:

GenericCachedSorter sort = new GenericCachedSorter();
sort.main(Longitude1);
sort.sort(distancetos, null);

new GenericCachedSorter();
GenericCachedSorter.main(Longitude1);

但两者都在这些代码行上给出了 NPE。我不确定为什么这不起作用。我的代码如下:

NearestStations.java

public class Neareststations extends Activity implements LocationListener {
LocationManager mLocationManager;

double longitude;
double latitude;

String distancea;
String distance1;
static Map<String, String> myMap1 = new HashMap<String, String>();

static ArrayList<Double> distancetos = new ArrayList<Double>();

@SuppressLint("NewApi")

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.neareststations);
    // Show the Up button in the action bar.
    getActionBar().setDisplayHomeAsUpEnabled(true);

    List<String> Lat1 = Arrays.asList(getResources().getStringArray(R.array.Latitude));
    Log.i("Lat1", String.valueOf(Lat1.get(0)));

    String[] Stations = getResources().getStringArray(R.array.Stations);
    String[] Longitude = getResources().getStringArray(R.array.Longitude);

    for (int h = 0; h <144; h++) {
        myMap1.put(Stations[h], Longitude[h]);

    }



        mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

        Location location = mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
        longitude = location.getLongitude();
        latitude = location.getLatitude();
        if(location != null && location.getTime() > Calendar.getInstance().getTimeInMillis() - 2 * 60 * 1000) {
            {

        }
        }
        else {
            mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5, 50, this);
            Log.i("MYTAG", String.valueOf(location));
        }

        longitude = location.getLongitude();
        latitude = location.getLatitude();
        if (location != null) {

            longitude = location.getLongitude();
            latitude = location.getLatitude();
            Log.i("MYTAG", String.valueOf(longitude));
            Log.i("MYTAG", String.valueOf(latitude));


            List<String> Long = Arrays.asList(getResources().getStringArray(R.array.Longitude));
            List<String> Lat = Arrays.asList(getResources().getStringArray(R.array.Latitude));

            Log.i("Long1", String.valueOf(Long.get(0)));

            Iterator<String> iterator = Lat.iterator();
            Iterator<String> iterator1 = Long.iterator();

            ArrayList<Double> longitudeArray = new ArrayList<Double>();

            while(iterator.hasNext()){
            for (int i=0; i<144;i++){

            double distance = 0;  

            double lat_end = 0;
            double lon_end = 0;


            try {
                lat_end = Double.parseDouble(iterator.next());
                lon_end = Double.parseDouble(iterator1.next());
                longitudeArray.add((lon_end));

            } catch (NumberFormatException e) {
                Log.v("Main", "Convert to Double Failed : ");
            }

            Location locationA = new Location("point A");  
            locationA.setLatitude(latitude);  
            locationA.setLongitude(longitude);  

            Location locationB = new Location("point B");  
            locationB.setLatitude(lat_end);  
            locationB.setLongitude(lon_end);  

            distance = locationA.distanceTo(locationB) * 0.000621371192237334;

            String dista = Double.toString(distance);


            distancetos.add(Double.parseDouble(dista));
            }
            }


                Collections.sort(distancetos);

                distancea = distancetos.get(0).toString();
                distance1 = distancetos.get(1).toString();

                String Longa = longitudeArray.get(0).toString();
                String Long1 = longitudeArray.get(1).toString();                

            String[] Stations1 = getResources().getStringArray(R.array.Stations);
            String[] Longitude1 = getResources().getStringArray(R.array.Longitude);
            String[] Latitude = getResources().getStringArray(R.array.Latitude);



            Map<String, String> myMap = new HashMap<String, String>();{
            for (int i = 0; i <144; i++) {
                myMap.put(Latitude[i], Stations1[i]);
            }
            }

            Map<String, String> myMap1 = new HashMap<String, String>();{
            for (int h = 0; h <144; h++) {
                myMap1.put(Longitude1[h], Stations1[h]);

            }
            }

            String value = myMap1.get(Longa);
    }
    }

    public void onLocationChanged(Location location) {
    }


    public void onProviderDisabled(String arg0) {}
    public void onProviderEnabled(String arg0) {}
    public void onStatusChanged(String arg0, int arg1, Bundle arg2) {}

public static class GenericCachedSorter {
public static void main(String[] args) {
        sort(distancetos, new ToComparable<Double, Double>() {
            @Override
            public Double toComparable(Double distance) {
                // return the longitude associated with this distance
                return (Double.parseDouble(myMap1.get(distance)));
            }
        });

        for (Double distance : distancetos)
            System.out.println(distancetos);
    }

  public interface ToComparable<T, C extends Comparable<? super C>> {
    C toComparable(T t);
  }

    public static <T, C extends Comparable<? super C>> void sort(List<T> list, ToComparable<T, C> function) {
       class Pair implements Comparable<Pair> {
          final T original;
          final C comparable;

          Pair(T original, C comparable) {
             this.original = original;
             this.comparable = comparable;
          }

          @Override
          public int compareTo(Pair other) {
                return
                  comparable == null && other.comparable == null ? 0 :
                  comparable == null ? -1 :
                  other.comparable == null ? 1 :
                  comparable.compareTo(other.comparable);
          }
       }

       List<Pair> pairs = new ArrayList<Pair>(list.size());
       for (T original : list)
          pairs.add(new Pair(original, function.toComparable(original)));

       Collections.sort(pairs);

       ListIterator<T> iter = list.listIterator();
       for (Pair pair : pairs) {
          iter.next();
          iter.set(pair.original);
       }
    }
}
}

谢谢您的帮助。

4

2 回答 2

1

public static void main(String[] args) is not available in Android. Remove it and call it in another simple method.

    public void SortingHere() {
    sort(distancetos, new ToComparable<Double, Double>() {
        @Override
        public Double toComparable(Double distance) {
            // return the longitude associated with this distance
            return (Double.parseDouble(myMap1.get(distance)));
        }
    });

    for (Double distance : distancetos)
        System.out.println(distancetos);
}
于 2013-10-28T23:51:10.100 回答
0

VenomVendor 大部分是正确的。

每个 java 文件只允许有一个公共类。这是在 Java 中做出的设计决策。在您的情况下,该文件的主要公共类和主要入口点已经是 Neareststations。

于 2013-10-29T00:09:37.943 回答