【问题标题】:Android: Sorting JSON objects by highest valueAndroid:按最高值对 JSON 对象进行排序
【发布时间】:2013-04-06 05:31:30
【问题描述】:

我想按最高值对我的数组(从 JSON 解析)进行排序。我想上榜。

我的 JSON 文件:

[   
    {
    "naam": "Peter",
    "wedstrijden": "10",
    "doelpunten": "4"
    },
    {
    "naam": "Harry",
    "wedstrijden": "8",
    "doelpunten": "6"
    }    
]

我必须将哪些代码按“doelpunten”对列表视图进行排序?或者这是不可能的? 这是我到目前为止的代码:

TopscoreListAdapter.java:

public class TopscoreListAdapter extends ArrayAdapter<Topscore> {
Context context;
List<Topscore> posities;

public TopscoreListAdapter(Context context, List<Topscore> posities) {
    super(context,R.layout.layout_topscorelist, posities);
    this.context = context;
    this.posities = posities;
}

@Override
public View getView(int position, View convertView, ViewGroup parent)
{
    TopscoreView  view = (TopscoreView) convertView;

    view = new TopscoreView(context);
    view.setTopscore(posities.get(position));

    return view;

}

Topscore.java:

public class Topscore {

String name;
String wedstrijden;
String doelpunten;

public Topscore(String name, String wedstrijden, String doelpunten) {

    this.name = name;
    this.wedstrijden = wedstrijden;
    this.doelpunten = doelpunten;

}

public String GetName() {
    return name;
}

public String GetWedstrijden() {
    return wedstrijden;
}

public String GetDoelpunten() {
    return doelpunten;
}

}

TopscoreFragment.java:

public class TopscoreFragment extends ListFragment {
private static final String url = "http://www...../spelers.json";

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View retView = inflater.inflate(R.layout.fragment_topscore, container,
            false);

    JsonTopscoreParser parser = new JsonTopscoreParser(url,
            new OnTopscoreCompleteListener() {

                @Override
                public void onComplete(ArrayList<Topscore> topscore) {
                    // TODO Auto-generated method stub
                    TopscoreListAdapter adapter = new TopscoreListAdapter(
                            getActivity(), topscore);
                    TopscoreFragment.this.setListAdapter(adapter);

                }

            });
    parser.execute();

    return retView;
}
}

OnTopscoreCompleteListener.java:

public interface OnTopscoreCompleteListener {

void onComplete(ArrayList<Topscore> bedrijven);
}

JsonTopscoreParser.java:

public class JsonTopscoreParser extends AsyncTask<Void, Void, ArrayList<Topscore>> {

private String url;
private ArrayList<Topscore> bosmtiTopscore;
private OnTopscoreCompleteListener listener;

public JsonTopscoreParser(String url, OnTopscoreCompleteListener listener) {
    this.listener = listener;
    this.url = url;
    bosmtiTopscore = new ArrayList<Topscore>();
}


public String readBosMtiFeed() {
    StringBuilder builder = new StringBuilder();
    HttpClient client = new DefaultHttpClient();
    HttpGet httpGet = new HttpGet(url);

    try {
        HttpResponse response = client.execute(httpGet);
        StatusLine statusLine = response.getStatusLine();
        int statusCode = statusLine.getStatusCode();
        if (statusCode == 200) {
            HttpEntity entity = response.getEntity();
            InputStream content = entity.getContent();
            BufferedReader reader = new BufferedReader(
                    new InputStreamReader(content));
            String line;
            while ((line = reader.readLine()) != null) {
                builder.append(line);
            }
        } else {
            Log.e(JsonTopscoreParser.class.toString(), "Failed to download file");
        }
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    return builder.toString();
}

@Override
protected ArrayList<Topscore> doInBackground(Void... params) {
    // TODO Auto-generated method stub
    String readBosMtiFeed = readBosMtiFeed();
    try {
        JSONArray jsonArray = new JSONArray(readBosMtiFeed);
        Log.i(JsonTopscoreParser.class.getName(),
                "Number of entries " + jsonArray.length());

        Topscore topscore;

        for (int i = 0; i < jsonArray.length(); i++) {
            JSONObject jsonObject = jsonArray.getJSONObject(i);
            String naam = jsonObject.getString("naam");
            String wedstrijden = jsonObject.getString("wedstrijden");
            String doelpunten = jsonObject.getString("doelpunten");

                topscore = new Topscore(naam, wedstrijden, doelpunten);
                if (!bosmtiTopscore.contains(topscore)) {
                    bosmtiTopscore.add(topscore);
                }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return bosmtiTopscore;
}

@Override
protected void onPostExecute(ArrayList<Topscore> topscore) {
    listener.onComplete(topscore);
    ListProvider provider = new ListProvider();
    provider.SetTopscore(topscore);
}

}

非常感谢!

【问题讨论】:

  • 您在这里倾倒了大量的代码,这些代码实际上与您的问题无关,并且对实际问题的影响不大。将 JSON 解析为对象的List,使用ComparatorList 进行排序。完毕。语言教程:docs.oracle.com/javase/tutorial/collections/algorithms

标签: android arrays json list sorting


【解决方案1】:

在您的最高得分者列表中使用Collections.sort() 并实现您自己的Comparable 对它们进行排序。

【讨论】:

    猜你喜欢
    • 2021-09-16
    • 2016-09-21
    • 2014-05-12
    • 1970-01-01
    • 2016-07-09
    • 2018-02-18
    • 1970-01-01
    • 2010-10-27
    • 2021-04-03
    相关资源
    最近更新 更多