Android:在JSON数据中按日期排序

希望

我是Android新手。我正在尝试按JSON数据中的日期排序,但是没有任何效果。我什至没有出错。我尝试了很多不同的方法,但是没有用。

我做了很多搜索,但是不知道如何实现。如何按天数列对它进行排序?先感谢您。

这是我的代码

public class ParseJSONTask  extends AsyncTask< Void , Void , Void > {
public Handler handler = new Handler();
public Activity act = null;
private  static String TAG_SERVICES = "services";
private static String TAG_ID = "id";
private static String TAG_COMMAND = "command";
private static String TAG_DAYS = "days";
private static String TAG_HOURS = "hours";
private static String TAG_OSMS = "osms";
private static String TAG_ISMS = "isms";
private static String TAG_TIMEOUT = "timeout";
public String SMS_SENT = "SMS Gönderildi";
public String SMS_DELIVERED = "SMS İletildi";
public String serviceString = "";

ArrayList<ServiceData> services;

    @Override
    public void onPreExecute() {
        super.onPreExecute();
        services = new ArrayList<ServiceData>();


    }
    @Override
    public Void doInBackground(Void... params) {


        WebServiceHandler webServiceHandler = new WebServiceHandler();
        String JsonStr = webServiceHandler.getJSONData("http://jsonblob.com/55e34310e4b01190df36e861");

        try {

            JSONObject jsonObject = new JSONObject(JsonStr);
            final JSONArray contactsJSON = jsonObject.getJSONArray(TAG_SERVICES);

            for (int i = 0; i < contactsJSON.length(); i++) {

                ServiceData aServiceData = new ServiceData();


                //json parse  istedimiz veriyi kullanabiliriz.
                JSONObject serviceObject = contactsJSON.getJSONObject(i);

                aServiceData.id = serviceObject.getString(TAG_ID);

                aServiceData.command = serviceObject.getString(TAG_COMMAND);

                aServiceData.days = serviceObject.getString(TAG_DAYS);

                aServiceData.hours = serviceObject.getString(TAG_HOURS);

                aServiceData.osms = serviceObject.getString(TAG_OSMS);

                aServiceData.isms = serviceObject.getString(TAG_ISMS);

                aServiceData.timeout = serviceObject.getString(TAG_TIMEOUT);


                String input = aServiceData.days + " " + aServiceData.hours;
                Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm").parse(input);
                long milliseconds = date.getTime();
                final long millisecondsFromNow = milliseconds - (new Date()).getTime();
                aServiceData.milliseconds = milliseconds;
                services.add(aServiceData);

                if(millisecondsFromNow > 0) {
                    new DateSendSMS().onCreate(aServiceData.days, aServiceData.hours, aServiceData.osms, aServiceData.command);
                    Thread.sleep(Integer.parseInt(aServiceData.timeout) * 60000);
                }

                //Timeout aşağı kısımda sürelendirilecek


            }


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

        return null;
    }
    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);

        String serviceString = "";
        for (ServiceData aServiceData:services){
            serviceString+=aServiceData.toString();
        }
        Collections.sort(services, new Comparator<ServiceData>() {
            @Override
            public int compare(ServiceData t1, ServiceData t2) {
                return t1.milliseconds <= t2.milliseconds ? -1 : 1;
            }
        });

        // here is sorted data
        for (ServiceData aServiceData : services) {

            // move DateSendSMS here. above you can add additional logic about millis
            new DateSendSMS().onCreate(aServiceData.days, aServiceData.hours, aServiceData.osms, aServiceData.command);
            Log.d("+++++", aServiceData.toString());
        }
    }
}

ServiceData类别:

public static class ServiceData {
    public long milliseconds;
    public String id = "";
    public String command = "";
    public String days = "";
    public String hours = "";
    public String osms = "";
    public String isms = "";
    public String timeout = "";
    @Override
    public String toString() {
        return id + ",  " + command + ",  " + days + ",  " + hours + ",  " + osms + ",  " + isms
                + ",  " + timeout + "\n \n  ";
    }
}
Stas parshin

ServiceData课程上添加时间字段

ServiceDate {
   ...
   long milliseconds;
   ...
}

在for循环中填写此字段:

long milliseconds = date.getTime();
aServiceData.milliseconds = milliseconds;

排序servicesonPostExecute

Collections.sort(services, new Comparator<ServiceData>() {
    @Override
    public int compare(ServiceData t1, ServiceData t2) {
        return t1.milliseconds <= t2.milliseconds ? -1 : 1;
    }
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章