2013-05-27 16 views
0

我正在用我的服務器創建一個帶有數據加載的ListView! 如何根據變量的值(例如,double)來命令我的列表? 爲了幫助您更多,該應用程序計算設備之間的距離,我希望列表從最小距離到最大距離的星星!這是我的代碼。任何想法?如何將我的ListView放入自定義順序中?

public class DriversList extends ListActivity{ 

private ProgressDialog pDialog; 

JSONParser jParser = new JSONParser(); 

ArrayList<HashMap<String, String>> driversList; 

private static String url_all_drivers = "http://192.168.2.4/drivers/get_all_drivers.php";//192.168.2.4 , 10.0.2.2 , taxidroid.yzi.me 

private static final String TAG_SUCCESS = "success"; 
private static final String TAG_DRIVERSID = "drivers"; 

private static final String TAG_ID = "id"; 
private static final String TAG_EMAIL="email"; 
private static final String TAG_NAME = "name"; 
private static final String TAG_SURNAME="surname"; 
private static final String TAG_TELEPHONE="telephone"; 
private static final String TAG_PLATE="plate"; 
private static final String TAG_CARMODEL="carmodel"; 
private static final String TAG_LATITUDE="latitude"; 
private static final String TAG_LONTITUDE="lontitude"; 
private static final String TAG_AVAILABLE="available"; 
private static final String DISTANCE="distance"; 
private static final String MILL="hh"; 
private double Clat,Clon; 

JSONArray drivers = null; 
@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.drivers_list_layout); 


driversList=new ArrayList<HashMap<String,String>>(); 
new LoadAllDrivers().execute(); 

Clat=getIntent().getExtras().getDouble("ClLat"); 
Clon=getIntent().getExtras().getDouble("ClLon");  
Toast.makeText(getBaseContext(), ""+Clat+""+Clon, Toast.LENGTH_LONG).show(); 
} 
class LoadAllDrivers extends AsyncTask<String, String, String>{ 

@Override 
protected void onPreExecute() { 
    super.onPreExecute(); 
    pDialog = new ProgressDialog(DriversList.this); 
    pDialog.setMessage("Loading products. Please wait..."); 
    pDialog.setIndeterminate(false); 
    pDialog.setCancelable(false); 
    pDialog.show();} 


@Override 
protected String doInBackground(String... args) { 
     List<NameValuePair> params = new ArrayList<NameValuePair>(); 

     JSONObject json = jParser.makeHttpRequest(url_all_drivers, "GET", params); 
     Log.d("All Drivers: ", json.toString()); 

    try { 
      int success = json.getInt(TAG_SUCCESS); 
       if (success == 1) { 

        drivers = json.getJSONArray(TAG_DRIVERSID); 


      for (int i = 0; i < drivers.length(); i++) { 
       JSONObject c = drivers.getJSONObject(i); 


       String id = c.getString(TAG_ID); 
       String email=c.getString(TAG_EMAIL); 
       String name = c.getString(TAG_NAME); 
       String surname=c.getString(TAG_SURNAME); 
       String telephone=c.getString(TAG_TELEPHONE); 
       String plate=c.getString(TAG_PLATE); 
       String carmodel=c.getString(TAG_CARMODEL); 
       double lat=c.getDouble(TAG_LATITUDE); 
       double lon=c.getDouble(TAG_LONTITUDE); 
       String avail=c.getString(TAG_AVAILABLE); 

       double R = 6371; // earth’s radius (mean radius = 6,371km) 
       double dLat = Math.toRadians(Clat-lat); 

       double dLon = Math.toRadians(Clon-lon); 
       double a = Math.sin(dLat/2) * Math.sin(dLat/2) + 
         Math.cos(Math.toRadians(Clat)) * Math.cos(Math.toRadians(lat)) * 
         Math.sin(dLon/2) * Math.sin(dLon/2); 
       double c1 = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
       double d = R * c1; 

       double gg=d*1000; 


       HashMap<String, String> map = new HashMap<String, String>(); 


       map.put(TAG_ID, id); 
       map.put(TAG_NAME, name); 
       map.put(TAG_SURNAME, surname); 
       map.put(TAG_CARMODEL, carmodel); 

       if (d<1) {map.put(DISTANCE,String.format("%.2f", gg)); map.put(MILL, "m"); } 
       else {map.put(DISTANCE, String.format("%.2f", d)); map.put(MILL, "km"); } 
       driversList.add(map); 



      } 
     } else {runOnUiThread(new Runnable() { 

      @Override 
      public void run() { 
       Toast.makeText(DriversList.this,"Αυτη τη στιγμη δεν υπαρχει διαθεσιμος οδηγος",Toast.LENGTH_SHORT).show();}}); 
     } 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 

@Override 
protected void onPostExecute(String file_url) { 
pDialog.dismiss(); 
runOnUiThread(new Runnable() { 

    public void run() { 
     /** 
     * Updating parsed JSON data into ListView 
     * */ 
     ListAdapter adapter = new SimpleAdapter(
       DriversList.this, driversList, 
       R.layout.list_item, new String[] { TAG_ID, 
         TAG_NAME,TAG_SURNAME,TAG_CARMODEL,DISTANCE,MILL}, 
       new int[] { R.id.id, R.id.name,R.id.surname,R.id.carmodel,R.id.txtdistance1,R.id.txtmorkm}); 

     setListAdapter(adapter); 


    } 
}); 

} 

    } 

    }  

DISTANCE是我想作爲訂單的標準的變量。感謝您的提前!

+0

你需要插入列表視圖之前對數據進行排序。 – NaserShaikh

回答

1

首先,爲什麼不創建一個類來表示你的Driver數據而不是使用HashMap?

反正你正在尋找可以利用Collections.sort來完成,你將要做的是:

  • 創建一個實現Comparator接口

    public class DriverComparator implements Comparator<HashMap<String, String>> { 
    
    public int compare(HashMap<String, String> o1, 
         HashMap<String, String> o2) { 
        double distance1 = -1; 
        double distance2 = -1; 
        try { 
        distance1 = Double.parseDouble(o1.get("DISTANCE")); 
        } catch (NumberFormatException ex){ 
    
        } catch (NullPointerException nex){ 
    
        } 
        try { 
         distance2 = Double.parseDouble(o1.get("DISTANCE")); 
         } catch (NumberFormatException ex){ 
    
         } catch (NullPointerException nex){ 
    
         } 
        if (distance1 == distance2){ 
         return 0; 
        } 
        if (distance1 > distance2) { 
         return 1; 
        } 
        return -1; 
    } 
    

    }

  • 在將它列入適配器之前對它進行排序:

    Collections.sort(list, new DriverComparator()); 
    

這裏是關於比較好的教程:Collections in Java

+0

thans幫助我!如何創建一個類而不是HashMap?以及這樣做的好處是什麼?也許一個愚蠢的問題,但我是新的發展。 – Dimitris

+0

http://docs.oracle.com/javase/tutorial/java/javaOO/classes.html和http://stackoverflow.com/a/10258127/951448 –

0

您應該繼承ListView適配器。有創建一個排序功能。任何排序算法都可以。然後將您的項目添加到適配器,對它們進行排序,最後將適配器設置爲ListView。

0

Listview是否它在這裏並不重要。你應該做的只是簡單地將你的數據之前交給你的列表視圖。

+0

我該怎麼做? – Dimitris

相關問題