# #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. «Я сделал это», пожалуйста, отредактируйте свой вопрос, чтобы показать обновленный код, а также включите туда вывод журнала, так как люди вряд ли увидят его здесь в комментариях.