Como usar arrayUnion na operação de conjunto

Mangesh:

Eu estou tentando executar FieldValue.arrayUnion()no set(), mas é lançar uma exceção. Estou usando em setvez de update, porque quero que ele crie o documento, se não existir.

Código (no meu caso Batch Write, é , mas acho que o princípio é o mesmo)

WriteBatch batch = db.batch();
MyModel myModel = new MyModel("rwTEPzn9vjyhZCZxFeq8", "Mangesh"); // sample data
batch.set(docRef, FieldValue.arrayUnion(myModel), SetOptions.mergeFields("items"));  // throws exception

Rastreio de pilha:

W/System.err: java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.firestore.v1.Value$ValueTypeCase com.google.firestore.v1.Value.getValueTypeCase()' on a null object reference
W/System.err:     at com.google.firebase.firestore.UserDataReader.convertAndParseDocumentData(com.google.firebase:firebase-firestore@@21.4.2:233)
W/System.err:     at com.google.firebase.firestore.UserDataReader.parseMergeData(com.google.firebase:firebase-firestore@@21.4.2:87)
W/System.err:     at com.google.firebase.firestore.WriteBatch.set(com.google.firebase:firebase-firestore@@21.4.2:89)
W/System.err:     at com.abc.AbcActivity.addTrans(AbcActivity.java:604)
W/System.err:     at com.abc.AbcActivity.validateInputs(AbcActivity.java:571)
W/System.err:     at com.abc.AbcActivity.onAddRecord(AbcActivity.java:260)
W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
W/System.err:     at android.view.View$DeclaredOnClickListener.onClick(View.java:5989)
W/System.err:     at android.view.View.performClick(View.java:7140)
W/System.err:     at android.view.View.performClickInternal(View.java:7117)
W/System.err:     at android.view.View.access$3500(View.java:801)
W/System.err:     at android.view.View$PerformClick.run(View.java:27351)
W/System.err:     at android.os.Handler.handleCallback(Handler.java:883)
W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:100)
W/System.err:     at android.os.Looper.loop(Looper.java:214)
W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:7356)
W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
W/System.err:     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

ATUALIZAÇÃO 1: MyModel é uma classe POJO muito simples com duas seqüências de caracteres.

public class MyModel {
    private String id, name;

    public MyModel (String id, String name) {
        this.id = id;
        this.name = name;
    }

    @PropertyName("id")
    public String getId() {
        return id;
    }

    @PropertyName("id")
    public void setId(String id) {
        this.id = id;
    }

    @PropertyName("name")
    public String getName() {
        return name;
    }

    @PropertyName("name")
    public void setName(String name) {
        this.name= name;
    }
}

ATUALIZAÇÃO 2: A exceção é lançada Stringe intvalores também. Ou seja, FieldValue.arrayUnion("abc")nem FieldValue.arrayUnion(1)funciona. Eu também observei o mesmo comportamento no caso de arrayRemove().

ATUALIZAÇÃO 3: Aqui está uma captura de tela do meu banco de dados.

DB

ATUALIZAÇÃO 4: testei setfora batch, diretamente no documento. Falha. Observe que itemsfoi esvaziado antes de fazer isso para evitar conflitos relacionados ao tipo.

docRef.set(FieldValue.arrayUnion("abc"), SetOptions.mergeFields("items"));

Parece impossível de usar arrayUnione arrayRemovecom set, apesar da documentação que diz: "retorna um valor especial que pode ser usado com set()ou update()"

Mangesh:

Finalmente, encontrei uma solução. Aqui está o código:

Map<String, Object> map = new HashMap<>();
map.put("items", FieldValue.arrayUnion(myModel));
batch.set(docRef, map, SetOptions.merge());

Isso cria o documento, se não existe, e atualiza a itemsmatriz. Observe que, SetOptions.merge()é usado em vez de SetOptions.mergeFields().

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

Como usar o loop na operação de limite no OpenCV

Como usar o arrayUnion no Firestore corretamente?

Como usar o arrayUnion com AngularFirestore?

Como usar o conjunto arm64 para realizar a operação de ponto flutuante?

como usar o operador semelhante na operação de junção

Como usar o conjunto de caracteres padrão na conexão de banco de dados django - mysql

Como posso usar operações lógicas na vinculação de dados do Android?

Como usar print () junto com outras operações na compreensão de listas?

Como usar um conjunto de validação simples na otimização de hiperparâmetros do modelo keras com GridSearchCV?

Tensorflow: como criar um conjunto de dados de texto personalizado para usar na tradução automática

Como corrigir: "A operação deve usar uma consulta atualizável" na instrução de atualização no Access VBA

Como usar a fração do conjunto de dados de treinamento no conjunto de dados de teste

Como usar o PCA no conjunto de teste (código)

Como posso usar o conjunto de tags no Django (jinja)?

Como usar a paginação do conjunto de chaves?

Tensorflow: como usar o conjunto de dados do gerador no Estimator

Como usar o conjunto de dados numpy no Pytorch Lightning

Como usar o conjunto de fasm Video MEM

Como usar o Container na operação find na biblioteca Jemmy?

Na API do conjunto de dados Tensorflow: como usar padded_batch para que um pads com um valor específico sem especificar o número de pads

Como atualizar o conjunto de tabelas column = null onde column = '\' sem erro da versão do servidor MySQL para a sintaxe correta usar próximo a '' \ '' na linha 1

como "usar conjunto de caracteres Unicode" no g ++?

Como usar as colunas do conjunto de dados

Como usar a operação de soma do Mongoose?

Como usar uma operação de álgebra definida no SQL

Como usar a operação de soma do Mongoose?

Como faço para usar um conjunto de resultados do LINQ para obter um grupo por contagem e mostrá-lo com Viewdata na página do mvc razor

Como usar !! em conjunto com replace_na em R

Como fazer a operação na lista de números?

TOP lista

  1. 1

    R Shiny: use HTML em funções (como textInput, checkboxGroupInput)

  2. 2

    O Chromium e o Firefox exibem as cores de maneira diferente e não sei qual deles está fazendo certo

  3. 3

    Como assinar digitalmente um documento PDF com assinatura e texto visíveis usando Java

  4. 4

    R Folheto. Dados de pontos de grupo em células para resumir muitos pontos de dados

  5. 5

    Gerenciar recurso shake de Windows Aero com barra de título personalizado

  6. 6

    Como obter dados API adequados para o aplicativo angular?

  7. 7

    UITextView não está exibindo texto longo

  8. 8

    Por que meus intervalos de confiança de 95% da minha regressão multivariada estão sendo plotados como uma linha de loess?

  9. 9

    Acessando relatório de campanhas na AdMob usando a API do Adsense

  10. 10

    Usando o plug-in Platform.js do Google

  11. 11

    Como posso modificar esse algoritmo de linha de visada para aceitar raios que passam pelos cantos?

  12. 12

    Dependência circular de diálogo personalizado

  13. 13

    Coloque uma caixa de texto HTML em uma imagem em uma posição fixa para site para desktop e celular

  14. 14

    iOS: como adicionar sombra projetada e sombra de traço no UIView?

  15. 15

    Como usar a caixa de diálogo de seleção de nomes com VBA para enviar e-mail para mais de um destinatário?

  16. 16

    Tabela CSS: barra de rolagem para a primeira coluna e largura automática para a coluna restante

  17. 17

    How to create dynamic navigation menu select from database using Codeigniter?

  18. 18

    Converter valores de linha SQL em colunas

  19. 19

    ChartJS, várias linhas no rótulo do gráfico de barras

  20. 20

    用@StyleableRes注释的getStyledAttributes。禁止警告

  21. 21

    não é possível adicionar dependência para com.google.android.gms.tasks.OnSuccessListener

quentelabel

Arquivo