0

I want to sort my array (parsed from JSON) by highest value. I want to make a topscorelist.

My JSON file:

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

Where i have to put which code to sort my listview by 'doelpunten'? Or is this impossible? This is the code i have so far:

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

}

Many thanks in advance!

1
  • You've dumped a ton of code here that really has nothing to do with your problem, and not much in the way of an actual question. Parse JSON to List of objects, sort the List using a Comparator. Done. Language tutorial on the subject: docs.oracle.com/javase/tutorial/collections/algorithms Commented Apr 13, 2013 at 20:30

1 Answer 1

1

Use Collections.sort() on your list of topscorers and implement your own Comparable to sort them.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.