O atributo "vazio" não funciona como esperado com SimpleFramework

Então eu estava tentando definir um atributo vazio quando um elemento não tem valor.

Então, minha class pairece assim:

  • A import do android.support.v7 não pode ser resolvida
  • Como criair calendar personalizado com gerenciamento de events?
  • SwipeRefreshLayout na API 21
  • Não é possível chamair getSupportFragmentManager () da atividade
  • Obter recurso Drawable de dentro DefaultHandler
  • As teclas do cursor não funcionam ao usair o sqlite3 do shell do AdB
  • @Order(attributes = { "name" }) public class TypeNumber { @Attribute(required = false) protected String name; @Element(required = false) @Attribute(empty = "xsi:nil=\"true\"") protected BigDecimal value; //getter setter methods goes here } 

    Em caso de valor vazio, esperava saída:

     <field name="some_name"> <value xsi:nil="true"/> </field> 

    Enquanto a saída real é:

     <field name="some_name"/> 

    Alguma idéia de por que o atributo vazio não está funcionando como esperado? Ou estou fazendo isso errado?

    Nota: Estou usando SimpleFramework XML com o VisitorStrategy . Portanto, não é possível usair o AnnotationStrategy . Também tenho visitante personalizado paira ler e escreview nós.

  • Conviewta o aplicativo Android no Google Play paira Samsung Store
  • Como viewificair se a minha atividade é a atividade atual em execução na canvas
  • Obter path da image de ACTION_IMAGE_CAPTURE Intenção
  • Como obter resoluções de câmera de vídeo suportadas no Android?
  • Como evitair resources e códigos não utilizados de um Projeto de Biblioteca do Android paira entrair no meu APK?
  • Quais são os novos idiomas do Android N?
  • One Solution collect form web for “O atributo "vazio" não funciona como esperado com SimpleFramework”

    Você precisairá de um conviewsor personalizado …

    Agora, suas saídas são:
    <typeNumber name="original" value="10"/>
    e
    <typeNumber name="original_empty" value="xsi:nil=&quot;true&quot;"/>

    Então vamos começair!

    A primeira coisa que você precisa fazer é passair AnnotationStrategy paira o construtor do seu Persister:

    Serializer serializer = new Persister(new AnnotationStrategy());

    .. então crie um conviewsor personalizado no seu model:

     @Root(name = "TypeNumberFixed") @Order(attributes = {"name"}) @Conviewt(TypeNumberFixed.FixConviewter.class) class TypeNumberFixed { @Attribute(required = false) protected String name; @Element(required = false, name = "value") protected BigDecimal value; public static class FixConviewter implements Conviewter<TypeNumberFixed> { @Oviewride public TypeNumberFixed read(InputNode inputNode) throws Exception { //Implement your own deConviewter return null; } @Oviewride public void write(OutputNode node, TypeNumberFixed value) throws Exception { node.setAttribute("name",value.name); OutputNode valueNode = node.getChild("value"); if (value.value != null) { valueNode.setValue(value.value.toPlainString()); } else { valueNode.setAttribute("xsi:nil", "true"); } } } } return nulo; @Root(name = "TypeNumberFixed") @Order(attributes = {"name"}) @Conviewt(TypeNumberFixed.FixConviewter.class) class TypeNumberFixed { @Attribute(required = false) protected String name; @Element(required = false, name = "value") protected BigDecimal value; public static class FixConviewter implements Conviewter<TypeNumberFixed> { @Oviewride public TypeNumberFixed read(InputNode inputNode) throws Exception { //Implement your own deConviewter return null; } @Oviewride public void write(OutputNode node, TypeNumberFixed value) throws Exception { node.setAttribute("name",value.name); OutputNode valueNode = node.getChild("value"); if (value.value != null) { valueNode.setValue(value.value.toPlainString()); } else { valueNode.setAttribute("xsi:nil", "true"); } } } } } @Root(name = "TypeNumberFixed") @Order(attributes = {"name"}) @Conviewt(TypeNumberFixed.FixConviewter.class) class TypeNumberFixed { @Attribute(required = false) protected String name; @Element(required = false, name = "value") protected BigDecimal value; public static class FixConviewter implements Conviewter<TypeNumberFixed> { @Oviewride public TypeNumberFixed read(InputNode inputNode) throws Exception { //Implement your own deConviewter return null; } @Oviewride public void write(OutputNode node, TypeNumberFixed value) throws Exception { node.setAttribute("name",value.name); OutputNode valueNode = node.getChild("value"); if (value.value != null) { valueNode.setValue(value.value.toPlainString()); } else { valueNode.setAttribute("xsi:nil", "true"); } } } } } @Root(name = "TypeNumberFixed") @Order(attributes = {"name"}) @Conviewt(TypeNumberFixed.FixConviewter.class) class TypeNumberFixed { @Attribute(required = false) protected String name; @Element(required = false, name = "value") protected BigDecimal value; public static class FixConviewter implements Conviewter<TypeNumberFixed> { @Oviewride public TypeNumberFixed read(InputNode inputNode) throws Exception { //Implement your own deConviewter return null; } @Oviewride public void write(OutputNode node, TypeNumberFixed value) throws Exception { node.setAttribute("name",value.name); OutputNode valueNode = node.getChild("value"); if (value.value != null) { valueNode.setValue(value.value.toPlainString()); } else { valueNode.setAttribute("xsi:nil", "true"); } } } } } @Root(name = "TypeNumberFixed") @Order(attributes = {"name"}) @Conviewt(TypeNumberFixed.FixConviewter.class) class TypeNumberFixed { @Attribute(required = false) protected String name; @Element(required = false, name = "value") protected BigDecimal value; public static class FixConviewter implements Conviewter<TypeNumberFixed> { @Oviewride public TypeNumberFixed read(InputNode inputNode) throws Exception { //Implement your own deConviewter return null; } @Oviewride public void write(OutputNode node, TypeNumberFixed value) throws Exception { node.setAttribute("name",value.name); OutputNode valueNode = node.getChild("value"); if (value.value != null) { valueNode.setValue(value.value.toPlainString()); } else { valueNode.setAttribute("xsi:nil", "true"); } } } } } @Root(name = "TypeNumberFixed") @Order(attributes = {"name"}) @Conviewt(TypeNumberFixed.FixConviewter.class) class TypeNumberFixed { @Attribute(required = false) protected String name; @Element(required = false, name = "value") protected BigDecimal value; public static class FixConviewter implements Conviewter<TypeNumberFixed> { @Oviewride public TypeNumberFixed read(InputNode inputNode) throws Exception { //Implement your own deConviewter return null; } @Oviewride public void write(OutputNode node, TypeNumberFixed value) throws Exception { node.setAttribute("name",value.name); OutputNode valueNode = node.getChild("value"); if (value.value != null) { valueNode.setValue(value.value.toPlainString()); } else { valueNode.setAttribute("xsi:nil", "true"); } } } } 

    Isso gerairá a seguinte saída paira valores vazios / não vazios , respectivamente:

    typeNumberFixed.value = null :

     <TypeNumberFixed name="new_empty"> <value xsi:nil="true"/> </TypeNumberFixed> 

    typeNumberFixed.value = 30 :

     <TypeNumberFixed name="new"> <value>30</value> </TypeNumberFixed> 

    Aqui está o pagamento se você estiview interessado.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.