Retrofit – maniglia chiave JSON che ha una struttura dynamic – Array / Object

Sto usando classi POJO che hanno getters e setters. Tuttavia, a causa di questo comportmento dinamico sarei costretto ad utilizzare la parte deserializzante. Ho anche implementato il codice per quello, ma c'è qualche altro modo per gestire questo. Perché, la risposta riportta di seguito è solo una piccola parte della risposta effettiva (che è massiccia e sto usando POJO getters e setters per esso)

OGGETTO

  • ActionBarSherlock: getSupportMenuInflator () non è definito
  • AudioRecorder in errore di Android Dimensione buffer non valida
  • Come modificare la visibilità delle visualizzazioni widget (pulsanti) Android di programmazione
  • URLConnection restituisce sempre 400: Bad Request quando cerco di caricare un file wav
  • Schede della barra di azione Sovrapposizione sulla rotazione dello schermo
  • C'è un modo per get la dimensione della scheda SD in Android?
  • secondaryUser: { id: 1, username: "admin", numberOfFollowers: 1, displayName: "admin" } 

    ARRAY

      secondaryUser: [ { id: 18150, activityDateTime: "2015-07-20 14:46:02", user: { id: 1, username: "admin", numberOfFollowers: 1, displayName: "admin" } }, { id: 18148, activityDateTime: "2015-07-20 13:35:02", user: { id: 3, username: "USER_1", numberOfFollowers: 4, displayName: "USER_1" } }, { id: 18146, activityDateTime: "2015-07-20 11:29:41", user: { id: 2468, username: "USER_2", numberOfFollowers: 1, displayName: "USER_2" } } ] } 

  • Spostare la camera utilizzando l'evento touch in Cardboard e Rajawali VR Android
  • Come visualizzare Progressbar Quando i dati vengono caricati dal Web?
  • Problemi di scorrimento GridView su Android
  • Applicare correttamente PagerAdapter in Android
  • Android - XML ​​Pull parser da URL?
  • Come utilizzare il branch di git con Android Studio
  • One Solution collect form web for “Retrofit – maniglia chiave JSON che ha una struttura dynamic – Array / Object”

    Spero che questo risolverà il tuo problema.

    Prima di tutto, nel tuo caso, se hai dichiarato secondario Uso come object o Array, la modifica in List<SecondaryUser> secondaryUser

    Crea un deserializzatore.

    DynamicJsonConverter.java

     public class DynamicJsonConverter implements Converter { private static String fromStream(InputStream in) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(in)); StringBuilder out = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { out.append(line); } return out.toString(); } @Override public Object fromBody(TypedInput typedInput, Type type) throws ConversionException { try { InputStream in = typedInput.in(); // convert the typedInput to String String string = fromStream(in); in.close(); // we are responsible to close the InputStream after use return string; } catch (Exception e) { // a lot may happen here, whatever happens throw new ConversionException(e); // wrap it into ConversionException so retrofit can process it } } @Override public TypedOutput toBody(Object object) { // not required return null; } } 

    La class Rest Adapter.

    BasePathAdapterForDynamicJSONKeys.java

      public class BasePathAdapterForDynamicJSONKeys { private static RetroFitInterface topRecommendationsInterface; public static RetroFitInterface getCommonPathInterface() { RestAdapter restAdapter = new RestAdapter.Builder() .setEndpoint(baseURL) .setConverter(new DynamicJsonConverter()) .build(); topRecommendationsInterface = restAdapter.create(RetroFitInterface.class); return topRecommendationsInterface; } 

    Inoltre, utilizzare il callback come Callback<String>() invece di Callback<YourObject>()

    Ora, all'interno della tua attività / frammento, all'interno del metodo di successo del callback retrofit, utilizzare questo.

     @Override public void success(String myData, Response response) { JSONObject mainObject = null; mainObject = new JSONObject(myData); //You can also use JSONObject, depends on what type the response is JSONArray myJsonArray = mainObject.getJSONArray("yourkey"); 

    E infine, scaricatelo dentro il tuo arrayslist. (Questa è fondamentalmente la conversione di arrays JSON a arrayslist :))

      ArrayList<MyObj> menuDetails = new Gson().fromJson(myJsonArray.toString(), new TypeToken<List<MyObj>>(){}.getType()); 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.