如何在Android App中运行静态内部类

时间:2013-10-28 23:32:22

标签: java android sorting location

我正在开发一款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);
       }
    }
}
}

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

public static void main(String[] args)在Android中不可用。 删除它并用另一种简单方法调用它。

    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);
}

答案 1 :(得分:0)

VenomVendor的大部分都是正确的。

您只能拥有one public class per java file。这是一个用Java制作的设计决策。在您的情况下,主要公共类和此文件的主要入口点已经是Neareststations。