0

So I have 4 strings that I got from a JSON API and was wondering how to style them? Eg: the 4 strings I have are max players, current players, a Boolean saying true or false if the server is online or offline, and the current ping. Right now it just displays like this:

35053

26690

true

205

But I want it to display like

26690/35053 players online

ping: 205

server online: true

So how would I go about doing that?

MainActivity.java:

package in.untie.hypixelmobile;

import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.HashMap;

public class MainActivity extends ListActivity {

    private Context context;
    private static String url = "http://api.razex.de/server/status/mc.hypixel.net:25565";

    private static final String PMAX = "Max";
    private static final Boolean ONLINE = false;
    private static final String PING = "Ping";
    private static final String PCURRENT = "Current";

    ArrayList<HashMap<String, String>> jsonlist = new ArrayList<HashMap<String, String>>();

    ListView lv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        new ProgressTask(MainActivity.this).execute();
    }

    private class ProgressTask extends AsyncTask<String, Void, Boolean> {

        private ProgressDialog dialog;
        private ListActivity activity;
        private Context context;

        public ProgressTask(ListActivity activity) {
            this.activity = activity;
            context = activity;
            dialog = new ProgressDialog(context);
        }

        @Override
        protected void onPreExecute() {
            this.dialog.setMessage("Loading");
            this.dialog.show();
        }

        @Override
        protected void onPostExecute(Boolean result) {
            if (dialog.isShowing()) {
                dialog.dismiss();
            }

            ListAdapter adapter = new SimpleAdapter(context, jsonlist, R.layout.list_item, new String[]{PCURRENT, PMAX, ONLINE.toString(), PING}, new int[]{R.id.ping, R.id.max, R.id.online, R.id.current});

            setListAdapter(adapter);

            lv = getListView();

        }

        @Override
        protected Boolean doInBackground(String... params) {

            JSONParser jParser = new JSONParser();
            JSONObject json = jParser.getJSONFromURL(url);

            try {

                String ping = json.getString("ping");
                Boolean isonline = json.getBoolean("online");

                JSONObject playersObject = json.getJSONObject("players");
                String pmax = playersObject.getString("max");
                String pcurrent = playersObject.getString("online");

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

                if (isonline) {

                    map.put(PING, ping);
                    map.put(ONLINE.toString(), isonline.toString());
                    map.put(PMAX, pmax);
                    map.put(PCURRENT, pcurrent);
                    jsonlist.add(map);

                } else {

                    map.put(ONLINE.toString(), isonline.toString());
                    jsonlist.add(map);

                }

            } catch (JSONException e) {

                e.printStackTrace();

            }
            return false;
        }
    }

}
Connor
  • 3
  • 4

2 Answers2

1

String.format() is commonly used for such tasks, e.g.

String.format("%d/%d players online\n\nping: %s\n\n server online: %s", PCURRENT, PMAX, PING, ONLINE.toString())

Read up on it here.

user1886323
  • 1,129
  • 7
  • 15
0

I guess this is what you want, result will be in jsonResults

package in.untie.hypixelmobile;

import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.HashMap;

public class MainActivity extends ListActivity {

    private Context context;
    private static String url = "http://api.razex.de/server/status/mc.hypixel.net:25565";

    private static final String PMAX = "Max";
    private static final Boolean ONLINE = false;
    private static final String PING = "Ping";
    private static final String PCURRENT = "Current";

    ArrayList<HashMap<String, String>> jsonlist = new ArrayList<HashMap<String, String>>();

    ListView lv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        new ProgressTask(MainActivity.this).execute();
    }

    private class ProgressTask extends AsyncTask<String, Void, Boolean> {
        StringBuilder jsonResults = new StringBuilder();
        private ProgressDialog dialog;
        private ListActivity activity;
        private Context context;

        public ProgressTask(ListActivity activity) {
            this.activity = activity;
            context = activity;
            dialog = new ProgressDialog(context);
        }

        @Override
        protected void onPreExecute() {
            this.dialog.setMessage("Loading");
            this.dialog.show();
        }

        @Override
        protected void onPostExecute(Boolean result) {
            if (dialog.isShowing()) {
                dialog.dismiss();
            }

            ListAdapter adapter = new SimpleAdapter(context, jsonlist, R.layout.list_item, new String[]{PCURRENT, PMAX, ONLINE.toString(), PING}, new int[]{R.id.ping, R.id.max, R.id.online, R.id.current});

            setListAdapter(adapter);

            lv = getListView();

        }

        @Override
        protected Boolean doInBackground(String... params) {

            JSONParser jParser = new JSONParser();
            JSONObject json = jParser.getJSONFromURL(url);

            try {

                String ping = json.getString("ping");
                Boolean isonline = json.getBoolean("online");

                JSONObject playersObject = json.getJSONObject("players");
                String pmax = playersObject.getString("max");
                String pcurrent = playersObject.getString("online");

                if (isonline) {
                    jsonResults.append(pcurrent+"/"+pmax+" players online");
                    jsonResults.append("ping: "+ping);
                    jsonResults.append("server online: "+ isonline.toString());


                } else {

                    jsonResults.append("server online: "+  isonline.toString());

                }

            } catch (JSONException e) {

                e.printStackTrace();

            }
            return false;
        }
    }

}
Aakash
  • 4,981
  • 5
  • 18
  • 35