setValue() не работает с активностью модели

# #java #android #firebase-realtime-database

Вопрос:

Я пытаюсь выяснить, что не так с моим кодом, но данные не загружаются FirebaseDatabase . Когда я нажимаю кнопку «Опубликовать», URL-адрес изображения FirebaseStorage вводится, но остальные данные не отображаются в моей базе данных. Вот код:

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_upload_a_boat);

    firebaseStorage = FirebaseStorage.getInstance();
    storageReference = firebaseStorage.getReference();
    Brand = findViewById(R.id.BrandOfProduct);
    Name = findViewById(R.id.Name);
    Categories = findViewById(R.id.Categories);
    Description = findViewById(R.id.Description);
    Price = findViewById(R.id.Price);
    Quantity = findViewById(R.id.Quantity);
    UploadProduct = findViewById(R.id.Update);
    firebaseAuth = FirebaseAuth.getInstance();
    databaseReference = firebaseDatabase.getInstance().getReference("ProductDetails");

    try {
        String userid = FirebaseAuth.getInstance().getCurrentUser().getUid();
        dataa = firebaseDatabase.getInstance().getReference("User").child(userid);
        dataa.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {

                UsersBs usersBs = snapshot.getValue(UsersBs.class);
                Address = usersBs.getAddress();
                ProductImage = (ImageButton) findViewById(R.id.ProductImage);

                ProductImage.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        onSelectImageclick(v);
                    }
                });
                UploadProduct.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        brand = Brand.getText().toString().trim();
                        name = Name.getText().toString().trim();
                        categories = Categories.getSelectedItem().toString().trim();
                        description = Description.getText().toString().trim();
                        quantity = Quantity.getText().toString().trim();
                        price = Price.getText().toString().trim();
                        uploadImage();
                    }
                });
            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {

            }
        });
    }catch (Exception e){
        Log.e("Σφάλμα: ",e.getMessage());
    }

}

private void uploadImage() {

    if(imageUri != null){
        final ProgressDialog progressDialog = new ProgressDialog(UploadAProduct.this);
        progressDialog.setTitle("Σαλπάρισμα.....");
        progressDialog.show();
        RandomUID = UUID.randomUUID().toString();
        reference = storageReference.child(RandomUID);
        BusinessId = FirebaseAuth.getInstance().getCurrentUser().getUid();
        reference.putFile(imageUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                reference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                    @Override
                    public void onSuccess(Uri uri) {
                        ProductDetails info = new ProductDetails(brand, name, categories, quantity, price, description, uri, RandomUID, BusinessId);
                        Toast.makeText(UploadAProduct.this, "" info, Toast.LENGTH_SHORT).show();
                        firebaseDatabase.getInstance().getReference("ProductDetails")
                                //.child(FirebaseAuth.getInstance().getCurrentUser().getUid())
                                .child(RandomUID)
                                .setValue(info)
                                .addOnCompleteListener(new OnCompleteListener<Void>() {
                                    @Override
                                    public void onComplete(@NonNull Task<Void> task) {
                                        progressDialog.dismiss();
                                        Toast.makeText(UploadAProduct.this,"Έτοιμή για σαλπάρισμα!",Toast.LENGTH_SHORT).show();
                                    }
                                });
                    }
                });
            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                progressDialog.dismiss();
                Toast.makeText(UploadAProduct.this,e.getMessage(),Toast.LENGTH_SHORT).show();
            }
        }).addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onProgress(@NonNull UploadTask.TaskSnapshot taskSnapshot) {
                double progress = (100.0*taskSnapshot.getBytesTransferred()/taskSnapshot.getTotalByteCount());
                progressDialog.setMessage("Σαλπάρισε " (int) progress "%");
                progressDialog.setCanceledOnTouchOutside(false);
                progressDialog.setCancelable(true);
            }
        });
    }

}

private void startCropImageActivity(Uri imageuri){
    CropImage.activity(imageuri)
            .setGuidelines(CropImageView.Guidelines.ON)
            .setMultiTouchEnabled(true)
            .start(this);
}
private void onSelectImageclick(View v){
    CropImage.startPickImageActivity(this);
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    if(cropImageUri !=null amp;amp; grantResults.length>0 amp;amp; grantResults[0]== PackageManager.PERMISSION_GRANTED){
        startCropImageActivity(cropImageUri);
    }else{
        Toast.makeText(this,"Ακύρωση! Η άδεια δεν εγκρύθηκε!",Toast.LENGTH_SHORT).show();
    }
}

@Override
@SuppressLint("NewApi")
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {

    if(requestCode==CropImage.PICK_IMAGE_CHOOSER_REQUEST_CODE amp;amp; resultCode== Activity.RESULT_OK){
        imageUri = CropImage.getPickImageResultUri(this,data);
        if(CropImage.isReadExternalStoragePermissionsRequired(this,imageUri)){
            cropImageUri = imageUri;
            requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},0);
        }else{
            startCropImageActivity(imageUri);
        }
    }
    if(requestCode==CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE){
        CropImage.ActivityResult result = CropImage.getActivityResult(data);
        if(resultCode==RESULT_OK){
            ((ImageButton) findViewById(R.id.ProductImage)).setImageURI(result.getUri());
            Toast.makeText(this,"Η εικόνα περικόπηκε με επιτυχία!",Toast.LENGTH_SHORT).show();
        }else if(resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE){
            Toast.makeText(this,"Αποτυχία περικοπής" result.getError(),Toast.LENGTH_SHORT).show();

        }
    }

    super.onActivityResult(requestCode, resultCode, data);
}
 

Ну, я проверил, была ли проблема с правилами моей базы данных, но ничего не кажется неправильным, и «чтение», и «запись» становятся «истинными». Я также попытался удалить свой проект Firebase и создать новый, но та же проблема все еще существовала.

Комментарии:

1. Прежде всего, перестаньте игнорировать ошибки. Воспользуйся Log.d(TAG, error.getMessage()); . У вас есть что-нибудь распечатанное в журнале регистрации? кроме того, срабатывает ли вообще ваш onDataChange? Каково местоположение вашей базы данных?

2. @AlexMamo Я не игнорирую их, но это не проявляется. Я имею в виду, что я не получаю никаких сообщений об этом.

3. @Tomas: Алекс имеет в виду такие методы, как: public void onCancelled(@NonNull DatabaseError error) { } По крайней мере, это должно быть: public void onCancelled(@NonNull DatabaseError databaseError) { throw databaseError.toException(); }

4. @FrankvanPuffelen да, я понял, что он имеет в виду. Я сделал это, но ничего не появилось. Единственное, что я вижу в Logcat, — это No App Check token for request.

5. «Я сделал это», пожалуйста, отредактируйте свой вопрос, чтобы показать обновленный код, а также включите туда вывод журнала, так как люди вряд ли увидят его здесь в комментариях.