2015-08-04 4 views
0

Итак, у меня есть 4 строки, которые я получил от API JSON, и задавался вопросом, как их стилизовать? Например: 4 строки, которые у меня есть, являются максимальными игроками, текущими игроками, логическим выражением true или false, если сервер находится в сети или в автономном режиме, и текущий пинг. Сейчас это просто показывает, как это:Как «стилизовать» API JSON API?

35053 

26690 

true 

205 

Но я хочу, чтобы показать, как

26690/35053 players online 

ping: 205 

server online: true 

Так как я пошел бы о том, что делать?

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

} 

ответ

1

String.format() обычно используется для таких задач, например,

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

Читайте об этом here.

0

Я думаю, это то, что вы хотите, результат будет в 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; 
     } 
    } 

}