Показывать контент или другой в зависимости от Json - Книжного магазина GSON

Хорошие у меня есть сомнения как получать некие параметры JSON, с книжного магазина GSON. И завися, что paramentros у него был, покажет контент или другой JSON.

Здесь у меня есть мой JSON.

{
  "decimalHola": 94.55,
  "boleanoHola": true,
  "enteroHola": 123,
  "idiomas": [
    {
      "en": {
        "msg_Fallo": {
          "titulo": "[EN] Titulo",
          "mensaje": "[EN] Mensaje blablabla"
        },
        "msg_Correcto": {
          "titulo": "[EN] Titulo",
          "mensaje": "[EN] Mensaje blablabla"
        }
      }
    },
    {
      "es": {
        "msg_Fallo": {
          "titulo": "[ES] Titulo",
          "mensaje": "[ES] Mensaje blablabla"
        },
        "msg_Correcto": {
          "titulo": "[ES] Titulo",
          "mensaje": "[ES] Mensaje blablabla"
        }
      }
    }
  ],
  "mensajeHola": "Hello World33355"
}

То, что мне хотелось бы делать, однажды загружается приложение получите родной язык мобильного телефона и так показывать ему сообщения утверждений на Вашем соответствующем языке. Проблема - что не, как я могу получать только стоимость в зависимости от устройства. Например, если устройство - [В], доставать все сообщения, связанные с Языком [В], очевидно [ES] нам хватало бы пока. Поскольку я, должно быть, делаю проверки правильно, и показывать соответствующий язык с Вашими Утверждениями Неудач / Правильно и Ваши сообщения "титула" и "сообщения".

MainActivity.class

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
     Request request = new Request.Builder()
                .url(url)
                .build();

        try {
            Response response = client.newCall(request).execute();
            if (response.isSuccessful()) {
                String json = response.body().string();
                String language = Locale.getDefault().getLanguage(); //Obtenemos el Idioma del Dispositivo
                Gson gson = new Gson();
                final Dat_json datoson = gson.fromJson(json, Dat_json.class);
            // datoson -> Contiene todo el JSON, pero necesitamos saber que idioma debemos mostrarle


            } else {
                Log.d("ERROR",response.body().string());
            }

        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

Здесь - соответствующие Классы:

Dat_json.class

public class Dat_json {
    @SerializedName("decimalHola")
    public double getDecimalHola() {
        return this.decimalHola;
    }
    public void setDecimalHola(double decimalHola) {
        this.decimalHola = decimalHola;
    }
    private double decimalHola;

    @SerializedName("boleanoHola")
    public boolean getBoleanoHola() {
        return this.boleanoHola;
    }
    public void setBoleanoHola(boolean boleanoHola) {
        this.boleanoHola = boleanoHola;
    }
    private boolean boleanoHola;

    @SerializedName("enteroHola")
    public int getEnteroHola() {
        return this.enteroHola;
    }
    public void setEnteroHola(int enteroHola) {
        this.enteroHola = enteroHola;
    }
    private int enteroHola;

    @SerializedName("idiomas")
    public List<Idioma> getIdiomas() {
        return this.idiomas;
    }
    public void setIdiomas(List<Idioma> idiomas) {
        this.idiomas = idiomas;
    }
    List<Idioma> idiomas;

    @SerializedName("mensajeHola")
    public String getMensajeHola() {
        return this.mensajeHola;
    }
    public void setMensajeHola(String mensajeHola) {
        this.mensajeHola = mensajeHola;
    }
    private String mensajeHola;

}

Idioma.class

public class Idioma {
    @SerializedName("en")
    public En getEn() {
        return this.en;
    }
    public void setEn(En en) {
        this.en = en;
    }
    En en;

    @SerializedName("es")
    public Es getEs() {
        return this.es;
    }
    public void setEs(Es es) {
        this.es = es;
    }
    Es es;
}

En.class

public class En {
    @SerializedName("msg_Fallo")
    public MsgFALLO getMsg_Fallo() {
        return this.msg_Fallo;
    }
    public void setMsg_Fallo(MsgFALLO msg_Fallo) {
        this.msg_Fallo = msg_Fallo;
    }
    MsgFALLO msg_Fallo;

    @SerializedName("msg_Correcto")
    public MsgCORRECTO getMsg_Correcto() {
        return this.msg_Correcto;
    }
    public void setMsg_Correcto(MsgCORRECTO msg_Correcto) {
        this.msg_Correcto = msg_Correcto;
    }
    MsgCORRECTO msg_Correcto;
}

Es.class

public class Es {
    @SerializedName("msg_Fallo")
    public MsgFALLO getMsg_Fallo() {
        return this.msg_Fallo;
    }
    public void setMsg_Fallo(MsgFALLO msg_Fallo) {
        this.msg_Fallo = msg_Fallo;
    }
    MsgFALLO msg_Fallo;

    @SerializedName("msg_Correcto")
    public MsgCORRECTO getMsg_Correcto() {
        return this.msg_Correcto;
    }
    public void setMsg_Correcto(MsgCORRECTO msg_Correcto) {
        this.msg_Correcto = msg_Correcto;
    }
    MsgCORRECTO msg_Correcto;
}

MsgFALLO.class

public class MsgFALLO {
    @SerializedName("titulo")
    public String getTitulo() {
        return this.titulo;
    }
    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }
    String titulo;

    @SerializedName("mensaje")
    public String getMensaje() {
        return this.mensaje;
    }
    public void setMensaje(String mensaje) {
        this.mensaje = mensaje;
    }
    String mensaje;
}

MsgCORRECTO.class

public class MsgCORRECTO{
    @SerializedName("titulo")
    public String getTitulo() {
        return this.titulo;
    }
    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }
    String titulo;

    @SerializedName("mensaje")
    public String getMensaje() {
        return this.mensaje;
    }
    public void setMensaje(String mensaje) {
        this.mensaje = mensaje;
    }
    String mensaje;
}
0
задан 19.03.2019, 20:17
1 ответ

В классе Dat_json обрежь добавлять его mГ©todos, чтобы возвращать данные pasГЎndole как parГЎmetro язык, который ты определил устройства.

Потом обрати внимание, что классы Он и В tienen та же структура, поэтому ты simplificarГ, - когда Язык использует класс для этой структуры, того же самого со структурой неудачи.

Это альтернатива. Той же формы другой mГ©todo podrГ, - чтобы возвращать сообщение неудачи или сообразительности перемещая язык, и если говорится о неудаче или сообразительности.

public class Dat_json{
  private dobule decimalHola;
  private boolean boleanoHola;
  private int enteroHola;
  private Idiomas idiomas;
  private String mensajeHola;

  public Idioma getIdioma(String idiomaDispositivo){
      switch(idiomaDispositivo){
          case "es": return idiomas.getEs();
          default: return idiomas.getEn();
      }
  }

  public Msg getMsg(String idiomaDispositivo, String tipoMensaje){
      Idioma idiomaDeterminado = getIdioma(idiomaDispositivo);
      return idiomaDeterminado.getMsg(tipoMensaje);
  }

  // Getters y Setters
}

public class Idiomas{
  private Idioma en;
  private Idioma es;

  // Getters y Setters
}

public class Idioma{
  @SerializedName("msg_Fallo")
  Msg msgFallo;
  @SerializedName("msg_Correcto")
  Msg msgCorrecto;

  public Msg getMessage(String tipoMensaje){
    switch(tipoMensaje){
        case 'fallo': return msgFallo;
        case 'correcto' return msgCorrecto;
        default: return null;
    }
  }

  // Getter y Setter
}

public class Msg{
  String titulo;
  String mensaje;
  // Getters y Setters
} 

, Поскольку он используется?

Давайте Предполагать, что ты определил, что устройство estГЎ в espaГ±ol и ты сохраняешь

String idiomaDisp = "es";

, Когда ты принимаешь json, deserelias с Gson ().

Gson gson = new Gson();
Dat_json datJson= gson.fromJson(json, Dat_json.class);

, Чтобы получать язык с сообщениями:

Idioma idiomaConMensajes = datJson.getIdioma(idiomaDisp);

, Чтобы получать сообщение неудачи:

Msg msgDeFallo = datJson.getMsg(idiomaDisp, "fallo");
1
ответ дан 02.12.2019, 05:27
  • 1
    Хуан, но aquí нет чего-то, в мое суждение. У класса Idioma должен быть сеттер , которую перемещать язык, который был получен от устройства. В этом сеттер нужен проверять, если полученная информация está между языками, которыми манипулирует модель данных или нет, и если не está есть, что setearle назначенный по умолчанию язык. Это - то, что я приношу комментируя недавно, и что он кажется, что не умудряются понять. – A. Cedano 20.03.2019, 00:19
  • 2
    Ло pensé и tambié n могут así тема - что этот класс инстанция с Gson (как признак не приходит (он решается в устройстве), я представляю себе то, что он просто остается null), и нужно вспоминать setearlo despué s desearializar. В этой другой solució n язык устройства проходит как аргумент в каждом вызове. Две формы реальные, но я incliné поэтому, чтобы не помещать признак, который не путешествует. – Juan 20.03.2019, 00:28

Теги

Похожие вопросы