根据位置上传图片,无需火力

时间:2019-09-03 22:16:06

标签: android firebase google-cloud-firestore firebase-storage

我正在创建一个用于在Firestore中存储多个图像链接的系统,并且该系统一直在工作,我从图库中进行选择并将其上传为List,以将其按顺序发送到银行(firestore),因为对我而言很重要,例如,我选择图像1,2,3,当我将它们的链接保存在Firestore中时,它永远不会以我加载的顺序获得2,1,3或3,1、2或3,2,1 ,它似乎是根据最浅的图像保存的,是根据我加载的位置保存的?我已经为此烦恼了几天。

已经可以从List.get(i)获取每张图像进行保存,但无济于事。

我正在这样保存在Firestore中-> list_img [ 0 link_img 1个link_img 2 link_img]

firestore scheme

从图库上传

GalleryConfig config = new GalleryConfig.Build()
                .limitPickPhoto(50)
                .singlePhoto(false)
                .hintOfPick("this is pick hint")
                .filterMimeTypes(new String[]{})
                .build();
        GalleryActivity.openActivity(Pag_producao_hq.this, reqCode, config);

上传

private void upload_Fotos_selecionadas(Uri uri, final int totalimg, int i) {
        Log.i("sdsd77", String.valueOf(i));
        final StorageReference ImageFolder =  FirebaseStorage.getInstance().getReference().child("imagens");
        String nomeImagem = UUID.randomUUID().toString();
        final StorageReference imagename = ImageFolder
                .child("HQ")
                .child(identificadorUsuario)
                .child(nomeImagem);
      arrayListImageRef.add(ImageFolder); //arraylist of type StorageRef 

        arrayListImageRef.add(imagename);
        imagename.putFile(uri)
                .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                        imagename.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                            @Override
                            public void onSuccess(Uri uri) {

                               String urlConvertida = uri.toString();

                                lista_url.add(urlConvertida);


                                if(lista_url.size()==totalimg){
                            Map<String, Object> new_imagens = new HashMap<>();
                              new_imagens.put("list_img", lista_url);

                              db.collection("HQ")
                                  .document(getId())
                             .collection("Imagens")
                              .add(new_imagens);

                                    dialog.dismiss();
                                    finish();
                                }
                            }
                        });
                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception exception) {
                        if (!isFinishing()) {
                            dialog.dismiss();
                        }
                        Toast.makeText(getApplicationContext(), exception.getMessage(), Toast.LENGTH_LONG).show();
                    }
                });

    }

1 个答案:

答案 0 :(得分:0)

Cloud Firestore不会以相同的插入顺序列出文档。自动ID与时间无关。您将需要添加一个时间戳字段,并使用此字段的顺序查询数据。